Python 将多索引转换为列名的简单平面索引
我有一个熊猫数据框,如下所示:Python 将多索引转换为列名的简单平面索引,python,pandas,Python,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 = 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
有人能确认这是否是正确的方法吗?如果其他人遇到这种情况,这似乎确实起到了作用:
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
我觉得很好,这就是我想做的。你应该把你的问题和答案分开。这一行答案毫无意义:重新写下你的答案,就好像你不知道答案一样,然后在这里回答,这样会更好