Python 如何根据特定列中的发生次数从数据帧(不包括行)创建新的数据帧?

Python 如何根据特定列中的发生次数从数据帧(不包括行)创建新的数据帧?,python,pandas,Python,Pandas,我有以下数据框: foo bar 0 Alice 42 1 Alice 44 2 Bob 22 我试图得到一个新的数据帧,不包括最后一行,因为Bob在foo列中只出现一次 foo bar 0 Alice 42 1 Alice 44 下面是我用来创建上述数据框的代码: df = pd.DataFrame( { "foo": ["Alice", "Alice", "Bob"], "bar": [42

我有以下数据框:

     foo  bar
0  Alice   42
1  Alice   44
2    Bob   22
我试图得到一个新的数据帧,不包括最后一行,因为
Bob
foo列中只出现一次

     foo  bar
0  Alice   42
1  Alice   44
下面是我用来创建上述数据框的代码:

df = pd.DataFrame(
    {
        "foo": ["Alice", "Alice", "Bob"],
        "bar": [42, 44, 22]
    }
)
以及我对这一要求的态度(这不起作用…)

我得到的错误是:

ValueError: cannot reindex from a duplicate axis

方法1

使用
groupby
filter

df.groupby('foo').filter(lambda x: len(x) >1)

     foo  bar
0  Alice   42
1  Alice   44
方法2

您可以将索引设置为
foo
,然后使用
loc

df.set_index('foo').loc[(df.foo.value_counts() >1)]

       bar
foo       
Alice   42
Alice   44
如果要在此之后重置索引,请执行以下操作:

df.set_index('foo').loc[(df.foo.value_counts() >1)].reset_index()
     foo  bar
0  Alice   42
1  Alice   44

方法1

使用
groupby
filter

df.groupby('foo').filter(lambda x: len(x) >1)

     foo  bar
0  Alice   42
1  Alice   44
方法2

您可以将索引设置为
foo
,然后使用
loc

df.set_index('foo').loc[(df.foo.value_counts() >1)]

       bar
foo       
Alice   42
Alice   44
如果要在此之后重置索引,请执行以下操作:

df.set_index('foo').loc[(df.foo.value_counts() >1)].reset_index()
     foo  bar
0  Alice   42
1  Alice   44

下面是另一个使用
.transform
的解决方案:

df_bob_removed = df.loc[
    df.groupby('foo')['foo'].transform('count') > 1, 
]

     foo  bar
0  Alice   42
1  Alice   44

下面是另一个使用
.transform
的解决方案:

df_bob_removed = df.loc[
    df.groupby('foo')['foo'].transform('count') > 1, 
]

     foo  bar
0  Alice   42
1  Alice   44