python3:如何对一列中每三个列的值求和

问题描述

有一个如下数据框:

 id   t_id  y1    y2
   1     1.   2.     1
   1     2.   2.     1
   1     3.   2.     1
   1     4.   2.     1
   1     .......
   1     15.   2.    1
   2     1.   2.     8
   2     2.   5.     6
   2     3.   5.     7
   2     4.   5.     5
   2     .......
   2     15.   5.   10
   ..............

每个id有许多id(1,2 ...)和t_id(1,... 15),每个t_id有y1,y2。我想像下面的数据帧一样对每三个t_id(123,456,789,10112,131415)中的每个id分别求和y1,y2

   id.     t_id      y1.   y2      
   1      1,2,3      6.     3
   1.     4,5,6      6.     3
   1.     7,8,9.     6.     3
   1     10,11,12.   6.     3
   1     13,14,15.   6.     3
   ......

谢谢!

解决方法

您可以映射t_id和分组依据:

mapped_t_id = (df['t_id']-1)//3

(df.groupby(['id',mapped_t_id])
   .agg({'t_id':set,'y1':'sum','y2':'sum'})
)
,

您可以通过一次将整个数据帧按3行分组来处理整个数据帧。这是这样做的方法。

import pandas as pd
df = pd.DataFrame({'id' : [1]*15 + [2]*15,'t_id':[i for i in range(1,16)]*2,'y1': [2]*15 + [5]*15,'y2':[1]*15 + [i for i in range (15,-1)]})
print (df)

df1 = pd.DataFrame(data=None,columns=df.columns)

for index,g in df.groupby(df.index // 3):
    df_id = g.iloc[0,0]
    df_tid = ','.join(str(g.iloc[i,1]) for i in range (3))
    df_y1 = g.sum(axis=0)['y1']
    df_y2 = g.sum(axis=0)['y2']
    df1.loc[index] = [df_id,df_tid,df_y1,df_y2]

print  (df1)

其输出将是:

  id      t_id  y1  y2
0  1     1,2,3   6   3
1  1     4,5,6   6   3
2  1     7,8,9   6   3
3  1  10,11,12   6   3
4  1  13,14,15   6   3
5  2     1,3  15  42
6  2     4,6  15  33
7  2     7,9  15  24
8  2  10,12  15  15
9  2  13,15  15   6

虽然这是一个很好的答复,但我喜欢@Quang Hoang如何解决它。简洁。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...