我有一个像这样的pandas数据框:
columns = pd.MultiIndex.from_tuples([
('A', 'cat', 'long'), ('A', 'cat', 'long2'),
('A', 'dog', 'short'), ('B', 'dog', 'short')
],
names=['exp', 'animal', 'hair_length']
)
df = pd.DataFrame(np.random.randn(4, 4), columns=columns, index=['W', 'X', 'Y', 'Z'])
这导致了这种结构:
exp A B
animal cat dog dog
hair_length long long2 short short
W 1.088097 -0.104486 2.574262 -0.614482
X -0.088731 0.620010 0.101627 -0.518250
Y -0.687172 0.108860 -1.932803 1.104636
Z 2.453511 0.947065 -2.144457 1.036991
我现在需要将列结构“扁平化”为一个简单的列名列表,例如A_cat_long,A_dog_short等。
以下命令似乎有效:
df.columns = [ '_'.join(x) for x in df.columns ]
A_cat_long A_cat_long2 A_dog_short B_dog_short
W -0.968703 0.086291 -0.255741 1.487564
X 2.113484 -0.118909 0.698032 -0.058647
Y 0.822555 0.483175 1.221687 0.759047
Z -1.260217 1.620935 0.417836 1.581388
有人可以确认这是否是正确的方法吗?
答案 0 :(得分:3)
如果有其他人遇到过这个问题 - 这似乎确实可以解决问题:
df.columns = [ '_'.join(x) for x in df.columns ]
结果:
A_cat_long A_cat_long2 A_dog_short B_dog_short
W -0.968703 0.086291 -0.255741 1.487564
X 2.113484 -0.118909 0.698032 -0.058647
Y 0.822555 0.483175 1.221687 0.759047
Z -1.260217 1.620935 0.417836 1.581388