我正在尝试使数据透视表看起来像第一个表中下面的预期结果(第二个表);
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()
..但是随后我要删除其他数据,并且似乎无法正确地进行旋转!
非常感谢任何帮助!
答案 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
希望它有用!