【问题标题】:How to remove and filter repeated entries in dataframe [duplicate]如何删除和过滤数据框中的重复条目[重复]
【发布时间】:2021-11-09 07:18:32
【问题描述】:

我有一个包含以下 3 列的数据框

  ID       Department      Number
---------------------------------
2324              Art           4
2324             Math           1
2324              Art           3
2400          Science           2
2593             Tech           5
2593             Math           1

我尝试先按 ID 过滤,然后按数字过滤。如您所见,有些 ID 重复。我想先找到重复的ID,然后选择对应的最高的Number。

例如,您可以看到 ID 2324 重复了 3 次。 (4, 1, 3) 是与 2324 的每个条目对应的数字。由于 4 是较大的数字,因此我选择 4 的条目。我想过滤数据框以获得此输出:

   ID       Department      Number
---------------------------------
2324              Art           4
2400          Science           2
2593             Tech           5

这是我目前的代码:

for previous, current in zip(df['ID'], df['ID'][1:]):
   for i, j in zip(df['Number'], df['Number'][1:]):
     if previous == current:
        if j> i:

但是,我不知道应该在print(previous, j) 旁边正确添加什么。 如果我将print(previous, j) 添加到嵌套循环中,我会得到重复的条目。 例如,如果我的代码是

for previous, current in zip(df['ID'], df['ID'][1:]):
   for i, j in zip(df['Number'], df['Number'][1:]):
     if previous == current:
        if j> i:
          print(previous, j)

输出

2324       4
2324       4
2324       4
2324       4
2324       4
2324       4        
2593       5   
2593       5
2593       5   
2593       5 

我希望它输出:

2324       4     
2593       5   

我还希望它包含未重复的 ID,因此在本例中为 2400 2。 此外,我不知道如何将正确的部门名称附加到嵌套循环中。

感谢所有花时间阅读本文并帮助我的人。我真的很感激。

【问题讨论】:

  • 这可能是您正在寻找的确切解决方案Python Pandas Dataframe select row by max value in group
  • 你不需要循环来实现你想要的,你可以先对 Number 列的值进行排序,然后使用 drop_duplciates,如下所示:df.sort_values(by=['num'], ascending=False) 后跟 df.drop_duplicates("id", inplace=True),默认情况下, drop_duplicates 将保留第一个条目。

标签: python pandas dataframe nested-loops


【解决方案1】:

用途:

df.loc[df.groupby('ID')['Number'].idxmax()]

【讨论】:

  • 是骗子loc + groupby + idxmax
  • @jezrael 维基
  • @U12-Forward 实际上,还有一个问题,假设“部门”不是第一个?我该如何考虑?
  • @shorttriptomars - df.loc[df.groupby('ID')['Number'].idxmax()]
  • @shorttriptomars - 将Number 转换为数字。
猜你喜欢
  • 2020-09-15
  • 2020-12-13
  • 2010-12-17
  • 2019-11-20
  • 2015-01-06
  • 2020-12-22
  • 2014-08-01
  • 2013-03-09
  • 2022-10-24
相关资源
最近更新 更多