【问题标题】:Pandas DataFrame Groupby and ReformingPandas DataFrame Groupby 和改革
【发布时间】:2019-01-31 13:09:18
【问题描述】:

我有一个关于将 groupby() 与以下 pandas 数据框的缩短示例一起使用的问题。我在这里想要实现的是为每个“store_id”添加每个“日期”的“金额”值,同时保留“days_of_week”和“holiday”列。

    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()

还有其他我不知道的方法可以轻松获得第二个示例表单吗?

【问题讨论】:

    标签: python pandas dataframe group-by


    【解决方案1】:

    您可以通过使用 panda 聚合函数来实现这一点。见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
    

    【讨论】:

      猜你喜欢
      • 2018-01-15
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 2021-05-18
      • 2023-03-25
      • 2020-04-12
      • 2020-04-26
      相关资源
      最近更新 更多