首页 > 解决方案 > 重新排列 DataFrame 中的列

问题描述

具有如下结构的 DataFrame:

    country       A      B        C      D  
0   Albany       5.2    4.7     253.75   4
1   China        7.5    3.4     280.72   3
2   Portugal     4.6    7.5     320.00   6
3   France       8.4    3.6     144.00   3
4   Greece       2.1    10.0    331.00   6

我想得到这样的东西:

cost             A            B
country       C     D     C      D
Albany      2.05    4    1.85    4
China       2.67    3    1.21    3
Portugal    1.44    6    2.34    6
France      5.83    3    2.50    3
Greece      0.63    6    3.02    6

我的意思是,将列 A 和 B 作为 C 和 D 上的标题,保持 D 与其恒定值相同,并在 C 中计算标题在 C 上的百分比。奥尔巴尼的示例:

有什么办法吗?

谢谢!

标签: python-3.xpandas

解决方案


您可以划分多个列,hereABby DataFrame.div,然后DataFrame.reindexby MultiIndexcreated byMultiIndex.from_product和 last set Dcolumns by original with MultiIndex slicers

cols = ['A','B']
mux = pd.MultiIndex.from_product([cols, ['C', 'D']])
df1 = df[cols].div(df['C'], axis=0).mul(100).reindex(mux, axis=1, level=0)

idx = pd.IndexSlice
df1.loc[:, idx[:, 'D']] = df[['D'] * len(cols)].to_numpy()
#pandas bellow 0.24
#df1.loc[:, idx[:, 'D']] = df[['D'] * len(cols)].values
print (df1)
          A            B   
          C  D         C  D
0  2.049261  4  1.852217  4
1  2.671701  3  1.211171  3
2  1.437500  6  2.343750  6
3  5.833333  3  2.500000  3
4  0.634441  6  3.021148  6

推荐阅读