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