Python:汇总b列数据的每五行并创建一个新列

时间:2018-08-28 22:05:19

标签: python-3.x pandas

我有一个如下数据框。我想将0到4行(每5行)求和,并创建另一个具有求和值的列(“新列”)。我的实际数据帧有263行,因此,每12行的最后三行将仅是三行的总和。我如何使用Pandas / Python做到这一点。我最近开始学习Python。感谢您提前提出任何建议!

我使用索引作为列值之一时,我的数据模式更加复杂,并且重复如下:

Row Data "new column"   
0   5  
1   1  
2   3  
3   3  
4   2    14         
5   4  
6   8   
7   1  
8   2  
9   1    16
10  0
11  2
12  3     5
0   3  
1   1  
2   2  
3   3  
4   2    11         
5   2  
6   6   
7   2  
8   2  
9   1    13    
10  1
11  0
12  1    2
...
259 50   89
260 1
261 4
262 5    10

我尝试了iterrows和groupby,但到目前为止无法正常工作。

1 个答案:

答案 0 :(得分:1)

使用此:

df['new col'] = df.groupby(df.index // 5)['Data'].transform('sum')[lambda x: ~(x.duplicated(keep='last'))]

输出:

   Data  new col
0     5      NaN
1     1      NaN
2     3      NaN
3     3      NaN
4     2     14.0
5     4      NaN
6     8      NaN
7     1      NaN
8     2      NaN
9     1     16.0

编辑以处理更新的问题:

g = df.groupby(df.Row).cumcount()
df['new col'] = df.groupby([g, df.Row // 5])['Data']\
                  .transform('sum')[lambda x: ~(x.duplicated(keep='last'))]

输出:

    Row  Data  new col
0     0     5      NaN
1     1     1      NaN
2     2     3      NaN
3     3     3      NaN
4     4     2     14.0
5     5     4      NaN
6     6     8      NaN
7     7     1      NaN
8     8     2      NaN
9     9     1     16.0
10   10     0      NaN
11   11     2      NaN
12   12     3      5.0
13    0     3      NaN
14    1     1      NaN
15    2     2      NaN
16    3     3      NaN
17    4     2     11.0
18    5     2      NaN
19    6     6      NaN
20    7     2      NaN
21    8     2      NaN
22    9     1     13.0
23   10     1      NaN
24   11     0      NaN
25   12     1      2.0