繁体   English   中英

熊猫划分多个mutliindex列

[英]Pandas divide multiple mutliindex columns

我有一个看起来像这样的数据框:

数据框

我想将x列除以y列,但此刻我得到以下结果:

结果数据框

完整示例:

import pandas as pd

# create example dataframe
data = {'x': [2, 4, 6], 'y': [1, 2, 3]}
df = pd.DataFrame(data)
df = pd.concat([df, df*10], axis=1, keys=['apple', 'orange'])

# slice just x and y columns
x = df.loc[:, (slice(None), 'x')]
y = df.loc[:, (slice(None), 'y')]

# divide (this doesn't work)
result = x / y

理想情况下,我想将结果添加回一个单独的列中:

在此处输入图片说明

有没有一种优雅的方法可以做到这一点?

您的解决方案可以正常工作,如果通过rename创建了相同的第二级:

new = (x.rename(columns={'x':'x/y'}) / y.rename(columns={'y':'x/y'}) 
print (new)

  apple orange
    x/y    x/y
0   2.0    2.0
1   2.0    2.0
2   2.0    2.0

或可以使用DataFrame.xs默认情况下将其除去选定的级别,以便使分割效果很好(因为xy DataFrame相同列),因此有必要通过MultiIndex.from_product创建第二个级别:

x = df.xs('x', axis=1, level=1)
y = df.xs('y', axis=1, level=1)
new = x / y
new.columns = pd.MultiIndex.from_product([new.columns, ['x/y']])
print (new)
  apple orange
    x/y    x/y
0   2.0    2.0
1   2.0    2.0
2   2.0    2.0

然后将concatDataFrame.sort_indexDataFrame.reindex

df = pd.concat([df, new], axis=1).sort_index(axis=1).reindex(['x','x/y','y'], axis=1, level=1)
print (df)
  apple         orange         
      x  x/y  y      x  x/y   y
0     2  2.0  1     20  2.0  10
1     4  2.0  2     40  2.0  20
2     6  2.0  3     60  2.0  30

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM