如何解决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如何解决它。简洁。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。