【发布时间】:2020-08-03 21:22:18
【问题描述】:
我想将具有多索引的数据帧中的所有列除以具有多索引的另一个数据帧,小一级。飞蛾指数的前两个级别是相同的。第三级应该是广播的。
df_0 = pd.DataFrame( {
"col0": [ 1, 2, 3, 4, 5 ],
"col1": [ 3, 6, 9, 12, 15 ],
} )
df_0.index = pd.MultiIndex.from_tuples(
[ ( "A", "a", 0 ), ( "A", "a", 1 ), ( "A", "b", 0 ), ( "A", "b", 1 ), ( "B", "b", 0 ) ]
)
df_0.index.names = [ "foo", "bar", "baz" ]
df_1 = pd.DataFrame( {
"stuff": [ 100, 110, 120, 130, ],
} )
df_1.index = pd.MultiIndex.from_tuples(
[ ( "A", "a" ), ( "A", "b" ), ( "B", "a" ), ( "B", "b" ) ]
)
df_1.index.names = [ "foo", "bar" ]
print( df_0 )
print( df_1 )
这给了我以下两个数据框df_0
col0 col1
foo bar baz
A a 0 1 3
1 2 6
b 0 3 9
1 4 12
B b 0 5 15
和df_1
stuff
foo bar
A a 100
b 110
B a 120
b 130
如果我尝试将每个列值除以相应的 stuff 列,我会收到一条错误消息
print( df_0.div( df_1 ) )
Join on level between two MultiIndex objects is ambiguous
我想要达到的是以下结果:
col0 col1
foo bar baz
A a 0 1/100 3/100
1 2/100 6/100
b 0 3/110 9/110
1 4/110 12/110
B b 0 5/130 15/130
【问题讨论】: