我有一个按日期和时间排序的数据框: df1:
ID Date A_sum A_count B_sum B_count A_last B_last
abc 01/jan 26 2 25 2 0 0
xyz 01/jan 54 3 45 3 4 6
df2:
ID Date Time A B
abc 02/jan 11 10 10
abc 02/jan 12 14 13
xyz 02/jan 1 26 24
xyz 02/jan 2 18 15
xyz 02/jan 3 20 16
我想在 id 上附加这两个 dfs 并想将 df2 更新为输出:
ID Date A_sum A_count B_sum B_count A_last B_last
abc 02/jan 50 #26+10+14 4 #2+2 48 4 14 13
xyz 02/jan 118 #54+26+18+20 6 #3+3 100 6 20 16
所以它从 df1 中获取列的先前值并将其添加到 df2
最佳答案
您可以使用 .groupby()
和 named aggregation
将 df2
转换为与 df1
相同的布局,然后将结果附加到 df1
,然后是另一轮 groupby()
和聚合,如下:
df3 = (df2.groupby(['ID', 'Date'], as_index=False, sort=False)
.agg(A_sum=('A', 'sum'), A_count=('A', 'count'),
B_sum=('B', 'sum'), B_count=('A', 'count'),
A_last=('A', 'last'), B_last=('B', 'last'))
)
df_out = (df1.append(df3)
.groupby('ID', as_index=False)
.agg({'Date': 'last',
'A_sum': 'sum', 'A_count': 'sum',
'B_sum': 'sum', 'B_count': 'sum',
'A_last': 'last', 'B_last': 'last'})
)
结果:
print(df_out)
ID Date A_sum A_count B_sum B_count A_last B_last
0 abc 02/jan 50 4 48 4 14 13
1 xyz 02/jan 118 6 100 6 20 16
关于python - 具有不同聚合的不同列的 Groupby 与另一个数据集的 cumsum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67871254/