python - 如何展平 pandas DataFrame 中的分层列索引?

标签 python pandas

假设我有一个 pandas.DataFrame,其列的层次索引如下:

import pandas as pd
columns = pd.MultiIndex.from_product([list('AB'), list('ab')])
df = pd.DataFrame(np.arange(8).reshape((2,4)), columns=columns)
print df

输出[1]:

   A     B   
   a  b  a  b
0  0  1  2  3
1  4  5  6  7

我想展平列索引,使其看起来如下所示:

   Aa  Ab  Ba  Bb
0   0   1   2   3
1   4   5   6   7

我试过了

def flatten(col):
    col.name = ''.join(col.name)
    return col

df.apply(f)

但这只是忽略了新列的修改名称。

最佳答案

设置轴

df.set_axis([f"{x}{y}" for x, y in df.columns], axis=1, inplace=False)

   Aa  Ab  Ba  Bb
0   0   1   2   3
1   4   5   6   7

index.map

df.columns = df.columns.map(''.join)
df

   Aa  Ab  Ba  Bb
0   0   1   2   3
1   4   5   6   7

对于非字符串列值

df.columns = df.columns.map(lambda x: ''.join([*map(str, x)]))
df

   Aa  Ab  Ba  Bb
0   0   1   2   3
1   4   5   6   7

关于python - 如何展平 pandas DataFrame 中的分层列索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41931332/

相关文章:

python - 在 Python 中使用 Scipy 进行约束样条拟合

python - 如果在 Pandas 中交换后列值相同,则删除重复项

python - 在列表理解中使用 sum() 时出错

Python 保存空图

python - Pandas 中的 DataFrame 代数

python - 如何使用两个现有列在 Pandas 中创建新列*并将新列放置在数据框中的某个位置

python - 在 Pandas 中,如何创建一个数据透视表来返回另一列中的最大值的相应列值?

python - 根据满足条件求两点之间的厚度

python - 将整数分配给字符串

python - 如何展平大循环堆栈?