我经常遇到这样的情况:我有一个带有3级MultiIndex的数据框。然后,我将该数据框缩小到两个级别(例如,获取平均值或一个级别的大小),然后对这些平均值进行子选择。
我无法使它正常工作。我曾尝试切片,loc(但这会导致错误)等,但我无法使其正常工作。
您如何做到这一点?示例:
import pandas as pd
import numpy as np
df1 = pd.DataFrame.from_dict({'Alpha': 'a a b b c'.split(),
'Word': 'one one three two three'.split(),
'AnotherWord':'alpha alpa beta bèta gamma'.split(),
'Random1': list(np.random.randint(0,20,5)),
'Random2':list(np.random.randint(0,200,5)),
'Random3':list(np.random.randint(0,100,5))}
)
df1.set_index(['Alpha', 'Word', 'AnotherWord'], inplace=True)
>>> df1
Random1 Random2 Random3
Alpha Word AnotherWord
a one alpha 9 123 34
alpa 18 9 77
b three beta 10 110 33
two bèta 11 153 88
c three gamma 9 130 6
filtered = df1.groupby(['Alpha', 'Word']).size()
>>> filtered
Alpha Word
a one 2
b three 1
two 1
c three 1
dtype: int64
现在我想对已过滤的== 1进行过滤:
结果应为:
Random1 Random2 Random3
Alpha Word AnotherWord
b three beta 10 110 33
two bèta 11 153 88
c three gamma 9 130 6
在这种情况下,我没有执行任何过滤,但是我确实想将数据添加到df1。
答案 0 :(得分:2)
您可以使用transform
s=df1.groupby(['Alpha', 'Word']).Random1.transform('size')
df1[s==1]
Out[58]:
Random1 Random2 Random3
Alpha Word AnotherWord
b three beta 15 68 79
two bèta 15 87 85
c three gamma 8 14 26