Groupby of different columns with different aggreagation with cumsum for next date(不同列的分组,不同的列与下一日期的累加和进行聚集)
本文介绍了不同列的分组,不同的列与下一日期的累加和进行聚集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个按日期和时间排序的数据帧,如下所示:
ID Date Time A B C
abc 06/Feb 11 12 12 10
abc 06/Feb 12 14 13 5
xyz 07/Feb 1 16 14 50
xyz 07/Feb 2 18 15 0
xyz 07/Feb 3 20 16 10
我想按ID和日期分组,并以SUM为分子,COUNT为分母,但对于下一个日期,总和将是前几个日期的累加,COUNT将作为Cumcount,A、B、C列的最后一个值的另外3列将被添加。例如:
ID Date A_Num A_denom B_Num B_Denom C_Num C_Denom A_Last B_Last C_Last
abc 06/Feb 26 2 25 2 15 2 14 13 5
xyz 07/Feb 54 3 45 3 60 3 20 16 10
我不能一次完成所有这些操作..有人能在这方面帮助我吗?提前谢谢。
现在我想将df1 acc中的df2添加到id为:
ID Date A_Num A_denom B_Num B_Denom C_Num C_Denom A_Last B_Last C_Last
abc 06/Feb 52 4 50 4 30 4 14 13 5
xyz 07/Feb 108 6 90 6 120 6 20 16 10
推荐答案
您可以在GroupBy.agg
中按组聚合sum
、size
和last
,然后选择num
和denum
并使用累加和上次添加者concat
由Aggregate创建的另一个数据帧GroupBy.last
:
cols = ['A','B','C']
print (df[cols].dtypes)
A int64
B int64
C int64
dtype: object
d = {'sum':'Num','size':'denom'}
df1 = df.groupby(['ID','Date'])[cols].agg(['sum','size']).rename(columns=d).cumsum()
df1.columns = df1.columns.map(lambda x: f'{x[0]}_{x[1]}')
df2 = df.groupby(['ID','Date'])[cols].last().add_suffix('_Last')
df3 = pd.concat([df1, df2], axis=1).reset_index()
print (df3)
ID Date A_Num A_denom B_Num B_denom C_Num C_denom A_Last
0 abc 06/Feb 26 2 25 2 15 2 14
1 xyz 07/Feb 80 5 70 5 75 5 20
B_Last C_Last
0 13 5
1 16 10
对于不使用索引的文件写入:
df3.to_csv('file', index=False)
如果解决方案使用中没有.reset_index
:
df3.to_csv('file')
这篇关于不同列的分组,不同的列与下一日期的累加和进行聚集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:不同列的分组,不同的列与下一日期的累加和进行聚集
基础教程推荐
猜你喜欢
- Python 的 List 是如何实现的? 2022-01-01
- 症状类型错误:无法确定关系的真值 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01