熊猫:如果一列匹配相同而另一列不匹配,则删除两行



我想在pandas数据框架中删除两行,其中一列(帐户)中的值不重复,而另一列(recharge_number)中的值在给定a中是重复的。

data = {'account': [43,43,43,43,45,45], 
'recharge_number': [17777, 17777, 17999, 17888, 17222, 17999] , 
'year': [2021,2021,2021,2021,2020,2020], 
'month': [2,3,5,6,2,9]} 
account  recharge_number   year  month
43        17777            2021    2
43        17777            2021    3
43        17999            2021    5    
43        17888            2021    6    
45        17222            2020    2
45        17999            2020    9
输入数据

输出:

account  recharge_number   year  month
43        17777            2021    2
43        17777            2021    3    
43        17888            2021    6    
45        17222            2020    2

输出数据

另一种方法是删除而不是保留行:

>>> df.drop(df[~df.duplicated(['id', 'number'], keep=False)
& df.duplicated('number', keep=False)].index)
id  number
0   5      10
1   5      10
3   6      20
5   7      40

第一个条件保护所有重复的('id', 'number')记录。第二个条件删除'number'相同的所有记录。

基本上,您希望复制整行(如果数据帧较大,则复制两列)。或者"号码不重复">

您可以使用duplicated:

df[df['id', 'number'].duplicated(keep=False)|~df['number'].duplicated(keep=False)]

输出:

id  number
0   5      10
1   5      10
3   6      20
5   7      40

.crosstab解:

mask = pd.crosstab(df["account"], df["recharge_number"]).ne(0).sum().gt(1)
print(df[~df["recharge_number"].isin(mask[mask].index)])

打印:

account  recharge_number  year  month
0       43            17777  2021      2
1       43            17777  2021      3
3       43            17888  2021      6
4       45            17222  2020      2

最新更新