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