为了账号安全,请及时绑定邮箱和手机立即绑定

删除列中具有重复项的行,仅适用于随后连续几天出现的重复项

删除列中具有重复项的行,仅适用于随后连续几天出现的重复项

米脂 2023-10-18 16:37:47
我有一个 Pandas 数据框,其中有一Date列日期时间格式,如下所示。当查看连续的天时,我想删除具有重复Name值的行,保留每个的最早日期Name。因此对于以下数据框:Date        Name  Points2020-04-24  John  32020-04-25  John  52020-04-26  John  82020-04-24  Bob   02020-04-25  Bob   02020-07-20  John  22020-07-21  John  7期望的结果是:Date        Name  Points2020-04-24  John  32020-04-24  Bob   02020-07-20  John  2请注意,数据不一定按上述方式排序。数据可以按Date然后Name或某种其他顺序排序。
查看完整描述

1 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

以下方法适用于任何数据顺序:


按名称/日期排序,应用日期偏移并检查增量。


import pandas as pd


data = {'Date':['2020-07-21', '2020-04-24', '2020-04-25', '2020-04-25', '2020-04-26', '2020-07-20', '2020-04-24'], 'Name':['John', 'John', 'John', 'Bob', 'John', 'John', 'Bob'], 'Points':[0,3,5,0,8,2,7]}

df = pd.DataFrame(data)

print(df)

df['Date']=pd.to_datetime(df['Date'])

df.sort_values(['Name', 'Date'], inplace=True)

print(df[df['Date'].shift(1)-df['Date']!= '-1 days'])


#print(df) - Note not sorted

         Date  Name  Points

0  2020-07-21  John       7

1  2020-04-25  John       5

2  2020-04-24  John       3

3  2020-04-25   Bob       0

4  2020-04-26  John       8

5  2020-07-20  John       2

6  2020-04-24   Bob       0

#print(df) - Output

        Date  Name  Points

6 2020-04-24   Bob       0

2 2020-04-24  John       3

5 2020-07-20  John       2

以下方法仅适用于问题中的数据顺序:


我将把它留在这里,以防将来有人发现它有帮助。澄清后,对于这个特定问题来说它已经过时了。


使用 Shift 与以前的名称进行比较:


df=df[df['Name'].shift(1) != df['Name']]

完整示例:


import pandas as pd


data = {'Date':['2020-04-24', '2020-04-25', '2020-04-26', '2020-04-24', '2020-04-25', '2020-04-20', '2020-04-21', ], 'Name':['John', 'John', 'John', 'Bob', 'Bob', 'John', 'John', ], 'Points':[3, 5, 8, 0, 0, 2, 7]}

df = pd.DataFrame(data)

print(df)

df=df[df['Name'].shift(1) != df['Name']]

print(df)


查看完整回答
反对 回复 2023-10-18
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信