我有一个正在处理的大型数据集,它有大约 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

慕容森
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')
添加回答
举报
0/150
提交
取消