簡體   English   中英

Pandas groupby 並根據來自兩個數據幀的索引日期求和

[英]Pandas groupby and sum according to an index date from two data frames

我想根據來自 2 個單獨數據幀的索引日期對特征進行分組和求和。

我的意思是,讓我們假設我有以下數據框:

會員ID 索引日期 y值
一個 2020-11-02 2
一個 2019-02-03 3
b 2018-02-03 2
一個 2020-02-03 9

現在,最初,我使用以下代碼創建了另一行,其中包含查找日期(我想要匯總特征的時間段):

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

並獲得以下數據框:

會員ID 索引日期 查找日期 y值
一個 2020-11-02 2019-11-02 2
一個 2019-02-03 2018-02-03 3
b 2018-02-03 2017-02-03 2
一個 2020-02-03 2019-02-03 9

我有另一個具有要與上述數據框合並的特征值的數據框。 特征數據框如下所示:

會員ID 服務日期 特色1 特征2 特色3
一個 2020-09-02 1 1 0
一個 2019-03-03 0 1 1
b 2018-05-03 0 0 1
一個 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' 之間。 因此,對於第一個數據幀的第一行,我想要一個結果,例如:

會員ID 索引日期 查找日期 特色1 特征2 特色3 y值
一個 2020-09-02 2019-09-02 2 1 0 2

現在,我想對具有不同周期開始和周期結束日期的每一行執行此操作。

使用DataFrame.merge並通過boolean 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM