如果两列中的记录在数据中至少两次没有同时出现,则删除pandas中的行

2024-04-25 01:13:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

为了说明这个问题,假设我有以下数据帧:

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'])

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

有人能提供一些见解吗?你知道吗


Tags: columns数据名称appledataframedatenp公司
2条回答
df1.groupby(['date','keyword']).apply(lambda x: x if len(x) >= 2 else None).dropna()

输出

         date  keyword
0  28/02/2017    Apple
1  28/02/2017    Apple
4  28/02/2017  WalMart
5  28/02/2017  WalMart

使用^{}指定检查重复的列,使用keep=False^{}返回所有重复行:

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

如果需要指定行数,请使用^{}^{}计数:

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

如果小数据帧或性能不重要,请使用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

相关问题 更多 >