首页 > 解决方案 > 在python中计算每个人在一个月内最后3天的支出

问题描述

这里是python新手。我正在尝试计算每个人在一个月内最后3天的支出。输入将是:

date   name   amount
mar.5  mary    1
mar.6  mary    2
mar.6  mary    3
mar.7  tom     4
mar.8  mary    5
mar.8  tom     6

理想的结果是

date   name   amount
mar.5  mary    1
mar.5  tom     0    
mar.6  mary    6
mar.6  tom     0
mar.7  mary    6
mar.7  tom     4
mar.8  mary    10(2+3+5)
mar.8  tom     10(4+6)

等等

我正在尝试使用 python 创建一个循环来圈出“最后 3 天”,但无法确定一种方法来执行此操作,任何输入都将不胜感激。希望每个人都在这个病毒的事情下安全。

标签: pythonpython-3.xpandasnumpy

解决方案


使用and DataFrame.pivot_table,然后 reshape by ,按和最后排序日期更改级别:DataFrame.rollingsumDataFrame.unstackDataFrame.swaplevel

df = (df.pivot_table(index='date',columns='name', values='amount', aggfunc='sum')
       .rolling(3, min_periods=1)
       .sum()
       .fillna(0)
       .unstack()
       .swaplevel(0,1)
       .sort_index(level=0)
       .reset_index(name='amount')
       )
print (df)
    date  name  amount
0  mar.5  mary     1.0
1  mar.5   tom     0.0
2  mar.6  mary     6.0
3  mar.6   tom     0.0
4  mar.7  mary     6.0
5  mar.7   tom     4.0
6  mar.8  mary    10.0
7  mar.8   tom    10.0

推荐阅读