如何在多索引数据框中添加连续的两行,重复组中的最后一行,如果它有奇数行?



使用以下数据帧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的第二级,所以可以通过2MultiIndex.get_level_valuessum的整数除法创建组:

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

最新更新