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

我觉得很好,这就是我想做的。你应该把你的问题和答案分开。这一行答案毫无意义:重新写下你的答案,就好像你不知道答案一样,然后在这里回答,这样会更好