【问题标题】:How to remove duplicates within a group in Pandas如何在 Pandas 中删除组内的重复项
【发布时间】:2019-05-03 23:18:29
【问题描述】:

我希望删除组“内”的重复项。我怎样才能以最有效的方式做到这一点?

我曾尝试仅按 ID 对数据进行分组,但由于公司可以在不同年份进行相同类型的投资,这种方法会导致我得出错误的结果。

我有这样的数据:

+----+-----------+-----------+---------------+
| ID |   Type    | seed_year | series_a_year |
+----+-----------+-----------+---------------+
|  1 | seed      |      2014 |             0 |
|  2 | seed      |      2014 |             0 |
|  2 | seed      |      2015 |             0 |
|  3 | seed      |      2012 |             0 |
|  3 | series_a  |         0 |          2014 |
|  3 | series_a  |         0 |          2015 |
+----+-----------+-----------+---------------+

我想要的输出在哪里:

+----+----------+-----------+---------------+
| ID |   Type   | seed_year | series_a_year |
+----+----------+-----------+---------------+
|  1 | seed     |      2014 |             0 |
|  2 | seed     |      2014 |             0 |
|  3 | seed     |      2012 |             0 |
|  3 | series_a |         0 |          2014 |
+----+----------+-----------+---------------+

我想保留第一轮(最早的)融资。

【问题讨论】:

标签: python pandas pandas-groupby


【解决方案1】:

您可以使用.drop_duplicates() 的“子集”参数:

df.drop_duplicates(subset=['ID', 'Type'], keep='first')

【讨论】:

  • 这是否需要以特定方式对我的数据进行排序?
  • 是的...您需要对其进行排序,以便您想要保留的值排在第一位...例如按年份...(尽管您的示例似乎已经在年份顺序)
  • 是的,这里的顺序很重要,因为这将决定要删除哪些行。除了(ID - 类型)组之外,您为什么保留问题中的行是否有特定的逻辑?
  • @dabe16ab 你也可以做df.groupby(['ID', 'Type'], as_index=False).min()
【解决方案2】:

参数keep默认为'first' 所以你可以省略它。

df.drop_duplicates(subset=['ID', 'Type'])

【讨论】:

    猜你喜欢
    • 2017-03-10
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 2020-12-23
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    相关资源
    最近更新 更多