嗨,我有一个 pandas 数据框,大致如下所示:
我正在尝试以如下格式获取每月每个项目的计数:
最后我想要一列取每列的平均值。所以最终的数据框看起来像:
我尝试了很多 pandas groupby 功能,但似乎无法完成。有人可以帮助我吗?
我尝试使用 pd.Grouper(freq='M') 但效果不太好。月份不会显示为列,而是显示为每个销售项目的行。有什么想法吗?
最佳答案
使用交叉表
:
(pd.crosstab(df['Item'], pd.to_datetime(df['Date'], dayfirst=True).dt.strftime('%B'))
.assign(Average=lambda d: d.mean(axis=1))
)
输出:
Date February January Average
Item
iphone 1 2 1.5
macbook 3 0 1.5
排序月份名称的替代方法:
from calendar import month_name
(pd.crosstab(df['Item'], pd.to_datetime(df['Date'], dayfirst=True).dt.month)
.rename(columns=dict(enumerate(month_name)))
.assign(Average=lambda d: d.mean(axis=1))
)
输出:
Date January February Average
Item
iphone 2 1 1.5
macbook 0 3 1.5
关于python - Pandas 按销售项目分组并统计列中每月的销售额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74375323/