Pandas:按一段线分组

2024-09-27 21:22:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很大的数据集,它有大约6000行和几百列。我已经设法把大部分信息按我需要的方式整理出来,但现在我陷入了困境,因为我无法按一段字符串正确地分组

原始数据的格式如下:

6001  17/11/2019 6:00:00 PM         2019  ...        30.519371    NaN
6002  17/11/2019 6:00:00 PM         2019  ...         0.000000    NaN
6003  17/11/2019 6:00:00 PM         2019  ...         0.000000    NaN
6004  17/11/2019 6:00:00 PM         2019  ...         0.000000    NaN
6005  17/11/2019 6:00:00 PM         2019  ...         0.000000    NaN

[6006 rows x 153 columns]>

首先,我运行了一个查询,根据其中一列筛选出数据。在这之后,我留下了1500行数据,我需要根据2列对它们进行分组,并将第三列中的数字相加。 此代码似乎主要完成了以下工作:

grouped_data = data_drill.groupby(['PeriodStartDate', 'Blast'])
                                  ['Calc_DRILLING_Holes'].sum()

结果是:

In[9]: grouped_data
Out[9]: 
PeriodStartDate        Blast 
1/09/2019 6:00:00 AM   6317.0     70.786625
                       7253.0     60.964185
                       8140.0     41.540451
1/09/2019 6:00:00 PM   6317.0     77.692637
                       7253.0     66.911911
                       8140.0     45.593178
1/10/2019 6:00:00 AM   2040.0     50.791661
                       2379.0     90.084856
                       5271.0     66.029160
1/10/2019 6:00:00 PM   2040.0     42.119914
                       2379.0     98.873622
                       5271.0     72.471029
1/11/2019 6:00:00 AM   2376.0     96.204423

这正是我所需要的,除了在这里,由于格式的日期是提出的,一天的信息是分开的上午6点和下午6点块。我不需要这种分离,我需要整个24小时的综合数据

我试着用str.slice只取PeriodStartDate列的前10位数字,但我似乎做得不对

最后,正如您在上面的输出中所看到的,结果日期是以一种奇怪的方式排序的——9月1日之后是10月1日,而在这两者之间有整整一个月的日期。有没有办法让他们得到妥善处理

提前谢谢


Tags: 数据字符串信息data格式方式数字nan
2条回答

您可以使用str属性:

grouped_data = data_drill.groupby([data_drill['PeriodStartDate'].str[:9], 'Blast'])
                                  ['Calc_DRILLING_Holes'].sum()

这假设索引将适用于所有日期

或者,将该列转换为datetime并使用data_drill['PeriodStartDate'].dt.date

如果列是datetime类型,那么最好只删除时间戳,而只保留日期

df['PeriodStartDate'] = df['PeriodStartDate'].dt.date

然后你可以按日期分组

如果它不是datetime对象(如果您在分割它时遇到问题,那么我会怀疑它是),您可以通过转换它来实现这一点

pd.to_datetime(df.PeriodStartDate)

之后,对于排序,只需按分组后的日期排序即可

df.groupby(['PeriodStartDate', 'Blast'])['Calc_DRILLING_Holes'].sum().reset_index().sort_values('PeriodStartDate')

相关问题 更多 >

    热门问题