不同列的分组,不同的列与下一日期的累加和进行聚集

2024-08-21Python开发问题
15

本文介绍了不同列的分组,不同的列与下一日期的累加和进行聚集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有一个按日期和时间排序的数据帧,如下所示:

 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中按组聚合sumsizelast,然后选择numdenum并使用累加和上次添加者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')

这篇关于不同列的分组,不同的列与下一日期的累加和进行聚集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

在xarray中按单个维度的多个坐标分组
groupby multiple coords along a single dimension in xarray(在xarray中按单个维度的多个坐标分组)...
2024-08-22 Python开发问题
15

Pandas中的GROUP BY AND SUM不丢失列
Group by and Sum in Pandas without losing columns(Pandas中的GROUP BY AND SUM不丢失列)...
2024-08-22 Python开发问题
17

pandas 有从特定日期开始的按月分组的方式吗?
Is there a way of group by month in Pandas starting at specific day number?( pandas 有从特定日期开始的按月分组的方式吗?)...
2024-08-22 Python开发问题
10

GROUP BY+新列+基于条件的前一行抓取值
Group by + New Column + Grab value former row based on conditionals(GROUP BY+新列+基于条件的前一行抓取值)...
2024-08-22 Python开发问题
18

PANDA中的Groupby算法和插值算法
Groupby and interpolate in Pandas(PANDA中的Groupby算法和插值算法)...
2024-08-22 Python开发问题
11

PANAS-基于列对行进行分组,并将NaN替换为非空值
Pandas - Group Rows based on a column and replace NaN with non-null values(PANAS-基于列对行进行分组,并将NaN替换为非空值)...
2024-08-22 Python开发问题
10