我对以下简短的pandas数据框示例使用groupby()有疑问。我要在这里实现的目标是在保留“ days_of_week”和“ holiday”列的同时,为每个“ store_id”添加每个“日期”的“金额”值。
store_id date amount days_of_week holiday
0 0 2017-11-14 100 1 0
1 0 2017-11-14 -100 1 0
2 1 2017-11-14 122 1 0
3 1 2017-11-19 55 6 1
4 2 2017-11-19 11 6 1
5 2 2017-11-19 32 6 1
因此结果应如下所示。
store_id date amount days_of_week holiday
0 0 2017-11-14 0 1 0
1 1 2017-11-14 122 1 0
2 1 2017-11-19 55 6 1
3 2 2017-11-19 43 6 1
我尝试删除'day_of_week'和'holiday'列,然后使用groupby()获取到目前为止每个日期的总和。但这远没有达到我想要的结果形式。
train = train.drop(columns=['days_of_week', 'holiday'])
train.groupby(['store_id', 'date'])['amount'].sum()
还有其他我不知道的方法可以轻松获取第二个示例表格吗?
答案 0 :(得分:4)
您可以通过使用熊猫聚合函数来实现。参见https://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.DataFrameGroupBy.agg.html
以下代码应适合您的情况
df_sum = df.groupby(['date','store_id']).agg({'amount':'sum', 'days_of_week': 'first', 'holiday': 'first' }).reset_index()
print(df_sum)
date store_id amount days_of_week holiday
0 2017-11-14 0 0.0 1 0
1 2017-11-14 1 122.0 1 0
2 2017-11-19 1 55.0 6 1
3 2017-11-19 2 43.0 6 1