将pandas的多重索引转换为简单的列名平面索引

3

I have a pandas data frame like this:

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

有人能确认这是否是正确的方法吗?


2
对我来说看起来没问题,这就是我会做的。 - EdChum
1个回答

5
如果其他人遇到这个问题 - 这确实可以解决问题:
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

你应该将问题和答案分开。这个单行回答没有意义:重新撰写你的回答,就好像你不知道答案一样,然后在这里回答它,会更好。 - SdaliM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接