python-3.x - 重新排列 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 上的百分比。奥尔巴尼的示例:
- 值 C 在
A: (5.2/253.75)*100 = 2.05
- 值 C 在
B: (4.7/253.75)*100 = 1.85
有什么办法吗?
谢谢!
解决方案
您可以划分多个列,hereA
和B
by DataFrame.div
,然后DataFrame.reindex
by MultiIndex
created byMultiIndex.from_product
和 last set D
columns 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
推荐阅读
- animation - gnuplot 中的 animate2D
- java - 使用 Java Apache HttpClient 4.5.12 时如何解决“连接重置”
- sql - SQL union all 与 group by
- sql - SQL 链接服务器 - 无法执行过程
- algorithm - 素数算法
- java - 我如何从java中的url中获取特定的单词
- laravel - 从关系中只获取一列
- c# - 使用 Fedex ShipService WSDL 的 C# 中的无效包裹计数或无效包裹序列号
- python - 为什么这个简单计算器的第二版可以正常工作,而第一版却不行?是因为代码中运算符的顺序吗?
- php - DataTables SSP - 列问题