【问题标题】:Pandas groupby and sum according to an index date from two data framesPandas groupby 和 sum 根据来自两个数据帧的索引日期
【发布时间】:2023-03-04 22:23:01
【问题描述】:

我想根据来自 2 个单独数据帧的索引日期对特征进行分组和求和。

我的意思是,让我们假设我有以下数据框:

MemberID indexDate yValue
a 2020-11-02 2
a 2019-02-03 3
b 2018-02-03 2
a 2020-02-03 9

现在,最初,我使用以下代码创建了另一行,其中包含查找日期(我想要汇总特征的时间段):

df['lookupDate'] = df['indexDate'] - pd.DateOffset(years=1)

得到如下数据框:

MemberID indexDate lookupDate yValue
a 2020-11-02 2019-11-02 2
a 2019-02-03 2018-02-03 3
b 2018-02-03 2017-02-03 2
a 2020-02-03 2019-02-03 9

我有另一个数据框,其中包含我想与上述数据框合并的特征值。特征数据框如下所示:

MemberID serviceDate feature1 feature2 feature3
a 2020-09-02 1 1 0
a 2019-03-03 0 1 1
b 2018-05-03 0 0 1
a 2020-06-03 1 0 0

现在,我想合并这样,我可以查看第一个数据帧的每一行,并将 lookupDate 视为周期开始日期,将 indexDate 视为第二个数据的周期结束日期框架。

我的意思是,对于 MemberID 'a',对于第一个数据帧,周期开始日期为 '2019-11-02',周期结束日期为 '2020-11 -02'。现在,我将使用它查看第二个数据框和 groupby MemberID 并总结 MemberID 'a' 的特征,这样它是 groupby 并在周期开始和周期结束日期内总结。

在这里,从第二个数据帧中,将选择 MemberID 'a' 的第一行和最后一行,因为 serviceDate 介于 '2019-11-02' 和 '2020-11-02' 之间。所以,对于第一个数据框的第一行,我想要一个结果:

MemberID indexDate lookupDate feature1 feature2 feature3 yValue
a 2020-11-02 2019-11-02 2 1 0 2

现在,我想对具有不同周期开始和周期结束日期的每一行执行此操作。

【问题讨论】:

  • 为什么在输出中是yValue=2 而不是yValue=4
  • 仅添加要素数据框中的要素。有 2 个数据框,因此第一个数据框不会更改,而另一个数据框正在汇总。

标签: python pandas dataframe date pandas-groupby


【解决方案1】:

DataFrame.mergeboolean indexingSeries.between 一起使用,然后聚合sum

df2 = df1.merge(df, on='MemberID', how='outer')

df2 = df1.merge(df, on='MemberID', how='outer')

df2 = (df2[df2['serviceDate'].between(df2['lookupDate'], df2['indexDate'])]
          .groupby(['MemberID','indexDate','lookupDate','yValue'], as_index=False).sum())
df2['yValue'] = df2.pop('yValue')
print (df2)
  MemberID  indexDate lookupDate  feature1  feature2  feature3  yValue
0        a 2020-02-03 2019-02-03         0         1         1       9
1        a 2020-11-02 2019-11-02         2         1         0       2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 2019-03-31
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    相关资源
    最近更新 更多