【发布时间】:2020-01-08 11:07:43
【问题描述】:
给定数据框:
df = pd.DataFrame({'col1': ['A', 'A', 'A','B','B'], 'col2': ['type1', 'type2', 'type1', 'type2', 'type1'] , 'hour': ['18:03:30','18:00:48', '18:13:46', '18:11:29', '18:06:31'] })
col1 col2 hour
A type1 18:03:30 # Drop this row as (A type1) already present
A type2 18:00:48
A type1 18:13:46 # keep this row as (A type1) already present.
B type2 18:11:29
B type1 18:06:31
我想根据 col1,col2删除重复项。
eg.(row(0): A type1, row(2): A type1)
保留仅具有最近时间的行,例如(18:13:46)。
我尝试使用 groupby 根据 col1 返回子集,并尝试使用 drop_duplicates 删除 col2 中的重复项。我需要想办法通过条件(最近一小时)
示例代码:
for key, grp in df.groupby('col1'):
grp.drop_duplicates(subset='col2', keep="LATEST OF HOUR")
预期结果:
col1 col2 hour
A type1 18:03:30
A type2 18:00:48
B type2 18:11:29
B type1 18:06:31
编辑添加上下文
我的原始数据框更大,解决方案也需要工作:
col1 col2 other hour
A type1 h 18:03:30 # Drop this row as (A type1) already present
A type2 ss 18:00:48
A type1 ll 18:13:46 # keep this row as (A type1) already present
B type2 mm 18:11:29
B type1 jj 18:06:31
它仍然需要根据小时删除列
【问题讨论】:
-
df.drop_duplicates(['col1','col2'])? -
df.drop_duplicates(['col1','col2'])? -
我如何确定 df.drop_duplicates(['col1','col2']) 将始终以 LATEST 时间(type1 18:13:46)删除 col ?
-
您可以在同一子集上使用
sort_values以升序对值进行排序。然后使用 drop_duplicates -
好的,所以我对“小时”列进行排序,然后保留 Last 将保留按排序列的最后一个值,即使它不是像我的编辑一样紧随其后的列?
标签: python pandas dataframe group-by