我的数据中有一些重复项需要更正。
这是一个数据框的示例:
test = pd.DataFrame({'event_id':['1','1','2','3','5','6','9','3','9','10'],
'user_id':[0,0,0,1,1,3,3,4,4,4],
'index':[10,20,30,40,50,60,70,80,90,100]})
我需要选择event_id
中具有相等值但user_id
中具有不同值的所有行。我尝试了此操作(基于类似的问题,但没有接受的答案):
test.groupby('event_id').filter(lambda g: len(g) > 1).drop_duplicates(subset=['event_id', 'user_id'], keep="first")
out:
event_id user_id index
0 1 0 10
3 3 1 40
6 9 3 70
7 3 4 80
8 9 4 90
但是我不需要user_id相同的第一行-0
。
问题的第二部分是-更正重复记录的最佳方法是什么?如何为后缀event_id
(_new
)添加后缀,但只能在此行添加后缀:
event_id user_id index
3 3_new 1 40
6 9_new 3 70
7 3 4 80
8 9 4 90
答案 0 :(得分:1)
尝试:
test[test.duplicated(['event_id'], keep=False) &
~test.duplicated(['event_id','user_id'], keep=False)]
输出:
event_id user_id index
3 3 1 40
6 9 3 70
7 3 4 80
8 9 4 90
答案 1 :(得分:1)
嗯,我尝试修正您的代码
test.groupby('event_id').
filter(lambda x : (len(x['event_id'])==x['user_id'].nunique())&(len(x['event_id'])>1))
Out[85]:
event_id user_id index
3 3 1 40
6 9 3 70
7 3 4 80
8 9 4 90
要更正重复的行,可以创建一个新的子键,个人不建议修改原始列。
df['subkey']=df.groupby('event_id').cumcount()