【问题标题】:Python remove duplicate values from column but keep only first occurrencePython从列中删除重复值但只保留第一次出现
【发布时间】:2022-01-24 16:09:39
【问题描述】:

我有一个 df = pd.DataFrame({'col1': ['A'] * 3 + ['B'] * 4 + ['C','B','A'],'col' :[2,3,4,2,4,2,1,3,4,4]})

我需要从两列中删除重复值,但只保留第一次出现的值。

试过了-

df = pd.DataFrame({'col1': ['A'] * 3 + ['B'] * 4 + ['C','B','A'],'col':[2,3,4,2,4,2,1,3,4,4]})
df = df.drop_duplicates(keep='first')

预期输出:

    col1  col
0    A    1
1    B    2
2    C    3
3           4

【问题讨论】:

  • 您的代码有什么问题,预期的输出是什么?看来您的代码运行良好。
  • 您是指给定列中的重复行或重复值吗?当您说删除时,您的意思是删除整行吗?正如@SangkeunPark 所说,预期的输出会让这更有意义。
  • @SangkeunPark 输出仍有重复值 col1 col 0 A 2 1 A 3 2 A 4 3 B 2 4 B 4 6 B 1 7 C 3
  • @user17240949 最好在问题中添加您的问题和预期输出,而不是作为评论。
  • @user17240949 还是不明白。输出应该是什么样的?您必须展示您的预期输出。现在,您的结果看起来没有重复值

标签: python pandas


【解决方案1】:

你想要什么不清楚。您的输出中没有重复项,因为 drop_duplicates 认为(默认情况下)整行

我想您可能希望每列独立删除重复项,在您的情况下,这会导致 NaN 值“col1”中只有 3 个唯一值,但“col”中只有 4 个.

无论如何,如果这是你想要的,你可以使用:

df.apply(lambda x: pd.Series(sorted(x.drop_duplicates(), key=pd.isna)))

输出:

  col1  col
0    A    2
1    B    3
2    C    4
3  NaN    1

注意。请注意,列之间的任何现有链接现在都已丢失

【讨论】:

  • 是的,这是预期的输出,每列只有一个唯一条目,但没有空值
  • 如果您有不同数量的唯一值,则不可能没有空值。或者您需要牺牲“col”列的一个值。你能明确描述你想要什么吗?
  • 如果我现在放弃 na 值会怎样
  • 如前所述,请再次编辑您的问题以提供预期的输出。
猜你喜欢
  • 2016-09-10
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-19
  • 1970-01-01
相关资源
最近更新 更多