Pandas数据透视表:日期范围内的aggfunc和

2024-09-27 17:37:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,如下所示:

#               Date      Name  RG
#-----------------------------------
#      1: 2013-04-25     NameA   1
#      2: 2013-04-25     NameB   3
#      3: 2013-04-25     NameC   1
#      4: 2013-04-25     NameD   2
#      5: 2013-04-25     NameE   1
#     ---                                                                              
#  13379: 2020-02-13     NameA   3
#  13380: 2020-02-13     NameB   1
#  13381: 2020-02-13     NameC   4
#  13382: 2020-02-13     NameD   1
#  13383: 2020-02-13     NameE   1

我想透视表并使用Name列作为索引。每个日期现在显示为一个单独的列,因此,对于每个名称索引,RG在过去六个月内求和,例如,通过将2019-08-07和2020-02-06之间的NameA的所有RG值相加,可以获得2020-02-06年NameA的RG值。例如:

#          Name     2013-04-25      2013-04-31      2013-05-07   ---   2020-02-06      2020-02-13
#--------------------------------------------------------------------------------------------------
#      1: NameA     1               2               3                  7               23
#      2: NameB     3               3               6                  15              21
#      3: NameC     1               4               5                  16              24
#      4: NameD     2               2               7                  19              40
#      5: NameE     1               4               9                  15              21
#     ---                                                                              
#    276: NameDE    3               4               6                  15              22
#    277: NameDF    1               4               6                  17              22
#    278: NameDG    4               8               9                  11              23
#    279: NameDH    2               3               5                  19              24
#    280: NameDI    1               4               6                  18              20

我可以使用以下方法来透视表:

df.pivot_table(
    values='RG', index='Name', columns='Date',
    fill_value=0, aggfunc='sum')

但是,每列中的值应为同一名称的前六个月内所有值的累计总和。如何修改aggfunc以实现此目标


Tags: 数据name名称datenamedrgaggfuncnameb
1条回答
网友
1楼 · 发布于 2024-09-27 17:37:43

我自己找到了答案。在旋转之前,必须通过以下步骤为所选期间生成累计和:

for index, row in df.iterrows():
    currentDate = row['Date']
    previousDate = row['Date'] - pd.DateOffset(months=12)
    name = row['Name']
    mask = (df['Date'] > previousDate) & (df['Date'] <= currentDate) & (df['Name'] == name)
    s = df.loc[mask]['RG'].sum()
    df4.loc[index,'RG'] = s

相关问题 更多 >

    热门问题