我想在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