[英]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.