【问题标题】:Pandas DataFrame: Removing duplicate rows based on condition in columnsPandas DataFrame:根据列中的条件删除重复的行
【发布时间】:2020-09-03 16:29:48
【问题描述】:

我有一个大数据框:

import pandas as pd 
df = pd.read_csv('data.csv)

df.head()
ID  Year    status
223725  1991    No
223725  1992    No
223725  1993    No
223725  1994    No
223725  1995    No

我有许多独特的IDs,我想根据IDstatus 列删除重复的行。

  1. 如果IDstatus 中的值为Yes,那么只有那个 行被保留,所有其他行的status 值为 No 针对特定的 ID 被删除。

  2. 如果IDstatus 的每个观察中都有No 然后保留特定于该ID 的任何行。

例如,在下面的DataFrame中,只应保留status中68084329的值为Yes的行,即最后一行,删除所有其他带有No的行。

 ID         Year    status
68084329    1991    No
68084329    1992    No
68084329    1993    No
68084329    1994    No
68084329    1995    No
68084329    1996    No
68084329    1997    No
68084329    1998    No
68084329    1999    No
68084329    2000    No
68084329    2001    No
68084329    2002    No
68084329    2003    No
68084329    2004    No
68084329    2005    No
68084329    2006    No
68084329    2007    No
68084329    2008    No
68084329    2010    No
68084329    2011    No
68084329    2012    Yes

如何根据上述情况删除重复行?

【问题讨论】:

  • 请习惯于提供示例 df 作为可调用的代码行,您可以创建一个虚拟 df 或使用 df.head(10).to_dict('list')从原始数据中获取它

标签: python pandas dataframe


【解决方案1】:

我认为你可以做到:

# sort by status so that No comes before Yes
df = df.sort_values('status')

# pick the last row, it will either be Yes or No
df = df.groupby('ID').last()

【讨论】:

  • 打败我!如果有两行 Yes 用于相同的 ID,则只是对 @MIMA 的警告,这只会保留其中一个
  • 感谢两位的意见。幸运的是,同一个 ID 没有带有 Yes 的行。
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 2022-06-21
  • 2016-05-05
  • 2018-01-11
  • 2023-02-14
  • 1970-01-01
  • 2021-04-02
  • 2020-10-27
相关资源
最近更新 更多