我有一个以下格式的熊猫数据框:
a b c
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
4 12 13 14
5 15 16 17
我想附加一个计算的行,该行基于给定的项目索引值执行一些数学运算,例如添加一个将索引值 < 2 的所有项目的值相加的行,新行的索引标签为“红色”。最终,我试图添加三行将索引值分组为类别:
- 索引值 < 2 的项目值总和的行,标记为“红色”
- 索引值为 1 < x < 4 的项目值总和的行,标记为“蓝色”
- 索引值 > 3 的项目值总和的行,标记为“绿色”
理想的输出如下所示:
a b c
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
4 12 13 14
5 15 16 17
Red 3 5 7
Blue 15 17 19
Green 27 29 31
我目前的解决方案涉及转置 DataFrame,为每个计算列应用一个映射函数,然后重新转置,但我想 pandas 有一种更有效的方法,可能使用.append()
.
编辑:我优雅的预设列表解决方案(最初使用.transpose()
但我使用.groupby()
and改进了它.append()
):
df = pd.DataFrame(np.arange(18).reshape((6,3)),columns=['a', 'b', 'c'])
df['x'] = ['Red', 'Red', 'Blue', 'Blue', 'Green', 'Green']
df2 = df.groupby('x').sum()
df = df.append(df2)
del df['x']
我更喜欢 BrenBarn 答案的灵活性(见下文)。