按最后n个日期对Pandas Dataframe 分组的行求和

a6b3iqyw  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(107)

我有一个Pandas的数据框,看起来像这样:

Ac   |Type   |Id    |Date       |Value     |Pe    |
---------------------------------------------------
Debt |Other  |DE    |2017-12-31 |5         |12M   | 
Debt |Other  |DE    |2018-03-31 |4         |12M   | 
Debt |Other  |DE    |2018-06-30 |3         |12M   |
Debt |Other  |DE    |2018-09-30 |2         |12M   |
Debt |Other  |DE    |2018-12-31 |5         |12M   | 
Debt |Other  |DE    |2019-03-31 |6         |12M   | 
Debt |Other  |DE    |2019-06-30 |1         |12M   | 
Debt |Other  |DE    |2019-09-30 |5         |12M   | 
Debt |Other  |DE    |2019-12-31 |2         |12M   |
Debt |Other  |DE    |2020-03-31 |3         |12M   | 
Debt |Other  |DE    |2019-06-30 |4         |12M   |

并且,按年份分组,我需要添加列'Value'中与该年份相关的4个先前值,如下所示:

Ac   |Type   |Id    |Date       |Value     |Pe    |
---------------------------------------------------
Debt |Other  |DE    |2017-12-31 |5         |12M   | 
Debt |Other  |DE    |2018-12-31 |4+3+2+5   |12M   | 
Debt |Other  |DE    |2019-12-31 |6+1+5+2   |12M   |
Debt |Other  |DE    |2020-09-30 |5+2+3+4   |12M   |

具备以下条件:
1.如果由于没有3行具有先前日期而无法对3个先前日期求和,则保留已经存在的日期,如示例中日期为2017 - 12 - 31的行的情况。
1.如果前面的行不都在同一年,则添加这些行的值列,并在"日期"列中保留最后一个日期。与示例中日期为2020 - 09 - 30的行的情况相同
你们能帮帮我吗?

vhmi4jdf

vhmi4jdf1#

对于每行,将最后 n = 4个日期的Value相加

df["Value"] = df["Value"].rolling(4, min_periods=1).sum()

然后,仅保留每年的最后一行

rows_to_keep = df["Date"].dt.year.drop_duplicates(keep="last").index
df = df.loc[rows_to_keep]
print(df)

相关问题