[英]Multiply two Series with MultiIndex in pandas
我正在尝试将两个Series
都乘以MultiIndex
:
import pandas as pd
tuples = [(0, 100, 1000),(0, 100, 1001),(0, 100, 1002), (1, 101, 1001)]
index_3levels=pd.MultiIndex.from_tuples(tuples,names=["l1","l2","l3"])
tuples = [(0, 100), (1, 101)]
index_2levels=pd.MultiIndex.from_tuples(tuples,names=["l1","l2"])
data_3levels = pd.Series(1, index=index_3levels)
data_2levels = pd.Series([2,3], index=index_2levels)
print data_3levels
l1 l2 l3
0 100 1000 1
1001 1
1002 1
1 101 1001 1
dtype: int64
print data_2levels
l1 l2
0 100 2
1 101 3
dtype: int64
问题是我无法将Series
从2级重新索引为3级:
data_2levels.reindex(data_3levels.index, level=["l1","l2"])
Exception: Join on level between two MultiIndex objects is ambiguous
我找到了解决方法:
for l1 in [0,1]:
data_3levels[l1] *= data_2levels[l1].reindex(data_3levels[l1].index, level="l2")
print data_3levels
l1 l2 l3
0 100 1000 2
1001 2
1002 2
1 101 1001 3
dtype: int64
但我认为应该只有一种方法可以执行此操作。
尝试这个。 reset_index
删除最后一个级别,因此乘以它们时相同
In [25]: x = data_3levels.reset_index(level=2,drop=True)*data_2levels
由于您想要原始索引(并且形状未更改),因此可以使用。
In [26]: x.index=data_3levels.index
In [27]: x
Out[27]:
l1 l2 l3
0 100 1000 2
1001 2
1002 2
1 101 1001 3
dtype: int64
有一个解决方法,直到通过各种增强请求提出“不错”的解决方案。
您可以简单地:
unstack
有问题的索引级别 stack
有问题的索引级别。 像这样:
In [92]: data_3levels.unstack('l3').mul(data_2levels, axis=0).stack()
Out[92]:
l1 l2 l3
0 100 1000 2
1001 2
1002 2
1 101 1001 3
dtype: float64
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.