为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas:按字符串切片分组

Pandas:按字符串切片分组

蛊毒传说 2022-05-11 16:33:04
我有一个正在处理的大型数据集,它有大约 6000 行和几百列。我已经设法根据需要整理出大部分信息,但现在我被卡住了,因为我无法按字符串的一部分正确分组。原始数据格式如下:6001  17/11/2019 6:00:00 PM         2019  ...        30.519371    NaN6002  17/11/2019 6:00:00 PM         2019  ...         0.000000    NaN6003  17/11/2019 6:00:00 PM         2019  ...         0.000000    NaN6004  17/11/2019 6:00:00 PM         2019  ...         0.000000    NaN6005  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_dataOut[9]: PeriodStartDate        Blast 1/09/2019 6:00:00 AM   6317.0     70.786625                       7253.0     60.964185                       8140.0     41.5404511/09/2019 6:00:00 PM   6317.0     77.692637                       7253.0     66.911911                       8140.0     45.5931781/10/2019 6:00:00 AM   2040.0     50.791661                       2379.0     90.084856                       5271.0     66.0291601/10/2019 6:00:00 PM   2040.0     42.119914                       2379.0     98.873622                       5271.0     72.4710291/11/2019 6:00:00 AM   2376.0     96.204423这正是我所需要的,除了这里由于日期显示的格式,一天的信息分为早上 6 点和下午 6 点。我不需要这种分离,我需要整个 24 小时期间的组合数据。我尝试使用str.slice只取 PeriodStartDate 列的前 10 位数字,但我似乎无法正确处理。最后,正如您在上面的输出中看到的那样,生成的日期以一种奇怪的方式排序 - 9 月 1 日之后是 10 月 1 日,而两者之间有整整一个月的日期。有没有办法让它们正确分类?提前致谢!
查看完整描述

2 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

您可以使用以下str属性:

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

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

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


查看完整回答
反对 回复 2022-05-11
?
慕容森

TA贡献1853条经验 获得超18个赞

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

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

然后你可以按日期分组。

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

pd.to_datetime(df.PeriodStartDate)

之后,为了排序,你可以按分组后的日期排序

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



查看完整回答
反对 回复 2022-05-11

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号