【发布时间】:2019-08-23 20:39:40
【问题描述】:
我的数据如下所示:
BOL,StopSequence,TimeArrived
5076223,1,12:52:56 PM
5076223,1,12:52:56 PM
5076223,2,9:50:58 AM
5076223,3,11:00:32 AM
5076223,4,11:00:52 AM
5077138,1,5:00:45 AM
5077138,2,1:43:13 PM
5077138,3,12:29:39 PM
5077138,4,1:02:31 PM
5077138,4,1:02:31 PM
5077138,5,1:02:50 PM
5077138,5,1:02:50 PM
5077138,5,1:02:50 PM
5077138,5,1:02:50 PM
如您所见,BOL 是我的索引。一个 BOL 会发生多个事件。有时,事件会重复发生(注意第 2 行和第 3 行 StopSequence 为 1)。
我需要做一些事情:
- 按 BOL 对数据帧进行分组
- 如果事件在 BOL 组内重复发生,请删除 - 我只想要一个
- 按 TimeArrived 对 BOL 组中的事件进行排序
- 添加一个名为“TotalTimeArrived”的新列,它是 TimeArrived 的总和。我不介意该值是否会在 BOL 组内的每个事件中重复出现,但很高兴听到建议
那么完成了什么,这是我到目前为止所做的:
df = pd.read_csv('./data/simple.csv', skipinitialspace=True)
# Pre Processing Stage
# Turn TimeArrived feature into timedelta
df['TimeArrived'] = pd.to_timedelta(df['TimeArrived'].str.strip())
# Group by BOL and for every group, sort by TimeArrived
df = df.sort_values(['BOL', 'TimeArrived'], ascending=True).groupby('BOL')
unique_bol_count = df.BOL.nunique().count()
print("There are {} unique BOL in this file".format(unique_bol_count))
所以我能够按 TimeArrived 对数据集和排序进行分组。现在我得到了一个 DataframeGroupBy,但我不知道如何从那里获取它。
我正在尝试像这样添加 TotalTimeArrived df['TotalTimeArrived'] = df['TimeArrived'].sum() 但错误是:
TypeError: 'DataFrameGroupBy' 对象不支持项目分配
最后,当尝试使用df.to_csv('./result.csv') 写入结果 csv 时,我得到了
AttributeError:无法访问“DataFrameGroupBy”对象的可调用属性“to_csv”,请尝试使用“apply”方法。
我还无法删除 BOL 分组中的重复事件。
非常感谢任何帮助,谢谢
【问题讨论】:
标签: python python-3.x pandas pandas-groupby