gpt4 book ai didi

python - 如果两列中的记录在数据集中至少出现两次,则删除 pandas 中的行

转载 作者:太空狗 更新时间:2023-10-30 00:42:19 26 4
gpt4 key购买 nike

我有一个包含日期和公司名称的数据集。我只想保留行,使公司名称和日期的组合在数据集中至少出现两次。

为了说明问题,让我们假设我有以下数据框:

df1 = pd.DataFrame(np.array([['28/02/2017', 'Apple'], ['28/02/2017', 'Apple'], ['31/03/2017', 'Apple'],['28/02/2017', 'IBM'],['28/02/2017', 'WalMart'],
['28/02/2017', 'WalMart'],['03/07/2017', 'WalMart']]), columns=['date','keyword'])

我想要的输出是:

df2 = pd.DataFrame(np.array([['28/02/2017', 'Apple'], ['28/02/2017', 'Apple'],
['28/02/2017', 'WalMart'],
['28/02/2017', 'WalMart']]), columns=['date', 'keyword'])

我知道如何根据两列中的条件删除行,但我不知道如何根据两个值的组合在数据集中出现的次数来删除行。

谁能提供一些见解?

最佳答案

使用DataFrame.duplicated指定用于检查欺骗的列和 keep=False 用于通过 boolean indexing 返回所有欺骗行:

df2 = df1[df1.duplicated(subset=['date','keyword'], keep=False)]
print (df2)
date keyword
0 28/02/2017 Apple
1 28/02/2017 Apple
4 28/02/2017 WalMart
5 28/02/2017 WalMart

如果需要指定行数使用GroupBy.transformGroupBy.size 计数:

df2 = df1[df1.groupby(['date','keyword'])['date'].transform('size') >= 2]

如果小型 DataFrame 或性能不重要,请使用 filter :

df2 = df1.groupby(['date','keyword']).filter(lambda x: len(x) >= 2)
print (df2)
date keyword
0 28/02/2017 Apple
1 28/02/2017 Apple
4 28/02/2017 WalMart
5 28/02/2017 WalMart

关于python - 如果两列中的记录在数据集中至少出现两次,则删除 pandas 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56933149/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com