Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将多个多索引列分开_Python_Pandas_Dataframe - Fatal编程技术网

Python 将多个多索引列分开

Python 将多个多索引列分开,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,看起来像这样: 我想用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
列除以
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
理想情况下,我希望将结果添加回单独的列:


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

如果由
重命名
创建的第二个级别相同,那么您的解决方案也会起作用:

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
或者可以使用-默认情况下已删除所选级别,因此divid工作良好(因为
x
y
数据帧
中的相同列),因此有必要通过以下方式创建第二个级别:

然后与和一起使用:


如果由
重命名
创建的第二级相同,则您的解决方案有效:

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
或者可以使用-默认情况下已删除所选级别,因此divid工作良好(因为
x
y
数据帧
中的相同列),因此有必要通过以下方式创建第二个级别:

然后与和一起使用:


df.xs
正是我想要的-谢谢
df.xs
正是我想要的-谢谢!
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