使用以下数据帧df1:
0 1
0 0 8 2
1 13 5
2 11 9
3 4 1
4 83 3
1 0 25 3
1 22 4
2 87 8
3 60 8
4 33 7
如果内部层的数量是奇数,我如何连续地将内部层顶部的两行相加,使最后一行保持不变?我想要创建一个新的数据框架df2,看起来像:
0 1
0 0 21 7
1 15 10
2 83 3
1 0 47 7
1 147 16
2 33 7
df2中的第0行是df1中第0行和第1行的和,df2中的第1行是df1中第2行和第3行的和,df2中的第2行只是df1中第4行的复制,前提是df1的行数为奇数。如果行数是偶数,当然,如果我有6行而不是5行,我也需要执行加法。
由于计数器在MultiIndex的第二级,所以可以通过2
与MultiIndex.get_level_values
和sum
的整数除法创建组:
df = df.groupby([df.index.get_level_values(0), df.index.get_level_values(1) // 2]).sum()
print (df)
0 1
0 0 21 7
1 15 10
2 83 3
1 0 47 7
1 147 16
2 33 7
或者如果可以设置索引值,则使用i1
安装提取值:
df = df.rename_axis(['i1','i2']).groupby(['i1', df.index.get_level_values(1) // 2]).sum()
print (df)
0 1
i1
0 0 21 7
1 15 10
2 83 3
1 0 47 7
1 147 16
2 33 7