【发布时间】:2013-11-02 14:00:49
【问题描述】:
如果 df 按 A、B 和 C 分组,看起来像这样:
A B C D
1 53704 hf 51602
51602
53802
ss 53802
53802
2 12811 hf 54205
hx 50503
我已经尝试了以下内容,这与另一篇文章中的内容相似:
df.groupby([df['A'], df['B'], df['C']]).drop_duplicates(cols='D')
这显然是不正确的,因为它会产生一个空数据框。我还尝试了 drop_duplicates 的另一种变体,它只是从“D”中删除所有重复项,无论它在哪个组中。我正在寻找的输出是:
A B C D
1 53704 hf 51602
53802
ss 53802
2 12811 hf 54205
hx 50503
这样重复项只有在分组到相同的 A/B/C 组合时才会被删除。
【问题讨论】:
-
在您的初始数据框中看不到任何重复项
-
哎呀。错字。修复它并添加第二个副本以使事情更明显。
-
你得到什么输出?它对我有用,
df.groupby(('A','B','C')).drop_duplicates('D')或df.drop_duplicates().groupby(('A','B','C') -
这有点令人困惑,因为您将这些作为列 (df['A']) 访问,但它们像索引一样显示(这就是您配置代表的方式吗?)...如果没有列,首先将它们设为列,这将是最简单的。
-
所以是的,它们实际上是索引,这是之前 groupby 操作的结果。在这里,我确实表现出我缺乏技能,但是如何将索引转换为列?我查看了 set_index 和 reindex 文档,但我不明白。
标签: python group-by pandas duplicates