带有Groupby的数据透视表-熊猫

时间:2020-10-01 15:42:17

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

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

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

..但是随后我要删除其他数据,并且似乎无法正确地进行旋转!

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

要获取每月,最好使用to_period。您可以通过To进行分组,然后取消堆叠:

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

答案 1 :(得分:1)

使用pd.crosstab:

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

答案 2 :(得分:1)

您可以使用部分原始代码,并将其与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

希望它有用!