[英]Pandas multiIndex slicing by aggregate
我有一個熊貓系列(S),它的索引如下:
bar one a
b
two a
b
baz one a
.
.
我有一個返回較低維度索引的條件函數。 我正在做的是執行類似S.groupby(level=(0,1)).median() > 1
這將返回一個帶有索引的系列,如下所示:
bar one
baz two
foo one
.
.
如何使用較低維索引對原始系列進行切片?
我知道我可以使用 .isin 重置索引和選擇行,但如果可能的話,我想使用 MultiIndex。
提前致謝!
===
以下是實際系列的樣子:
BATCH ITEM SEQ X Y
D1M2 765 6005 -5 0 5.085
769 6005 -3 -2 6.174
767 6005 -4 -1 5.844
769 6005 -3 -1 5.702
-4 2 5.154
767 6005 -3 2 5.337
-2 4 5.683
3 0 6.178
769 6005 -3 2 5.128
765 6005 1 -4 4.791
我執行以下操作:
sm = s.groupby(level=(0,1,2)).median()
sigma = sm.std()
sms = sm[sm - sm.median() < sigma/2]
現在短信看起來像:
BATCH ITEM SEQ
D1M2 765 6005 4.938
769 6005 5.428
現在我想只對與 sms 中的索引匹配的 series 進行切片。
所以我想要這片s (與sms的索引匹配):
BATCH ITEM SEQ X Y
D1M2 765 6005 -5 0 5.085
769 6005 -3 -2 6.174
-3 -1 5.702
-4 2 5.154
-3 2 5.128
765 6005 1 -4 4.791
僅當您的索引級別相同時才有可能,這不是這里的情況,因為在s
中,您有['BATCH', 'ITEM', 'SEQ', 'X', 'Y']
而在sms
中,您只有['BATCH', 'ITEM', 'SEQ']
。
您必須先刪除X
和Y
級別才能匹配索引:
# Statically
>>> s[s.index.droplevel(['X', 'Y']).isin(sms.index)]
# Dynamically
>>> s[s.index.droplevel(s.index.names.difference(sms.index.names)).isin(sms.index)]
# Output
BATCH ITEM SEQ X Y
DIM2 765 6005 -5 0 5.085
769 6005 -3 -2 6.174
-1 5.702
-4 2 5.154
-3 2 5.128
765 6005 1 -4 4.791
dtype: float64
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.