使用另一个数据框选择一个数据框?

时间:2018-07-12 14:34:49

标签: python pandas dataframe

我经常遇到这样的情况:我有一个带有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。

1 个答案:

答案 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