繁体   English   中英

熊猫:按字符串的一部分分组

[英]Pandas: grouping by a slice of a string

我有一个正在处理的大型数据集,它具有约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日,而其间有一个整月的日期。 有没有办法让它们正确排序?

提前致谢!

您可以使用str属性:

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

假设您的索引将适用于所有日期。

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

如果该列是日期时间类型,最好将所有时间戳记一起删除,只保留日期

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

然后您就可以按日期分组。

如果它不是日期时间对象(如果您在切片时遇到问题,那么我怀疑它是),则可以通过将其转换来实现

pd.to_datetime(df.PeriodStartDate)

之后,要进行排序,您可以对分组依据之后的日期进行排序

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM