簡體   English   中英

在熊貓中用MultiIndex乘以兩個系列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM