【问题标题】:Pivot Table with Groupby - PandasGroupby 数据透视表 - Pandas
【发布时间】:2021-01-17 09:02:25
【问题描述】:

我正在尝试根据第一个数据创建一个数据透视表,使其看起来像下面的预期结果(第二个表);

To Date         From    To    Quantity

10/11/2020   USA   Ireland  5
10/11/2020   USA   France   4
11/11/2020   USA   France   6
12/11/2020   USA   Jamaica  6
12/11/2020   USA   France   5
.
.
.
14/02/2021   USA   Ireland  65
           01/11/2020   01/12/2020   01/01/2021  01/02/2021

Ireland    15                                    65
France     10
Jamaica    6

我可以通过 groupby() 来获取每月数据。 我希望数据透视表有每个国家/地区的总金额..

df.index = qathist['To Date']
df.index = pd.to_datetime(df.index)
df_m= df.groupby(by=[df.index.year, df.index.month]).sum()

..但是我正在删除其他数据等,似乎无法正确旋转它!

非常感谢任何帮助!

【问题讨论】:

    标签: python pandas indexing group-by multi-index


    【解决方案1】:

    要获得每月,最好使用to_period。一个你可以通过To到groupby,然后unstack:

    df.groupby(['To',df.index.to_period('M')])['Quantity'].sum().unstack()
    

    【讨论】:

    • 这太完美了!非常感谢!
    【解决方案2】:

    使用 pd.crosstab:

    pd.crosstab(df['To'], df['To Date'], df['Quantity'], aggfunc='sum')
    

    【讨论】:

    • 这绝对有用!有没有办法按月对数量求和?所以这些列是每月值而不是每日值?
    • 哦..每月一次,不,你需要先按月分组。
    【解决方案3】:

    您可以使用一部分原始代码并将其与pd.pivot_table 函数混合使用。

    例如,如果您的原始数据框是 df

    df.index = pd.to_datetime(df["To Date"])
    pivot = df.pivot_table(values="Quantity", 
                           columns="To", 
                           index=[df.index.month, df.index.year],
                           aggfunc='sum')
    

    输出如下

    To               France  Ireland  Jamaica
    To Date To Date                          
    2       2021        NaN     65.0      NaN
    10      2020        4.0      5.0      NaN
    11      2020        6.0      NaN      NaN
    12      2020        5.0      NaN      6.0
    

    希望有用!

    【讨论】:

      猜你喜欢
      • 2019-01-03
      • 1970-01-01
      • 2019-12-30
      • 2018-06-27
      • 2016-09-11
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多