【发布时间】:2019-07-03 21:14:48
【问题描述】:
我有以下数据框:
import pandas as pd
columns = pd.MultiIndex.from_arrays([['n1', 'n1', 'n2', 'n2'],
['p', 'm', 'p', 'm']])
values = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
df = pd.DataFrame(values, columns=columns)
n1 n2
p m p m
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
现在我想在这个 DataFrame 中添加另一列 (n3),其下层列 p 和 m 应该是对应的下层列 n1 和 n2 的总和:
n1 n2 n3
p m p m p m
0 1 2 3 4 4 6
1 5 6 7 8 12 14
2 9 10 11 12 20 22
这是我想出的代码:
n3 = df[['n1', 'n2']].sum(axis=1, level=1)
level1 = df.columns.levels[1]
n3.columns = pd.MultiIndex.from_arrays([['n3'] * len(level1), level1])
df = pd.concat([df, n3], axis=1)
这是我想要的,但与不使用 MultiIndex 列的代码相比感觉非常麻烦:
df['n3'] = df[['n1', 'n2']].sum(axis=1)
我当前的代码也只适用于包含两个级别的列 MultiIndex,我有兴趣对任意级别执行此操作。
有什么更好的方法?
【问题讨论】:
标签: pandas