gpt4 book ai didi

python - 如何标记 Pandas 中的重复组?

转载 作者:行者123 更新时间:2023-12-02 00:44:03 24 4
gpt4 key购买 nike

我有一个数据框:

>>> df
A
0 foo
1 bar
2 foo
3 baz
4 foo
5 bar

我需要找到所有重复的组并用连续的 dgroup_id 标记它们:

>>> df
A dgroup_id
0 foo 1
1 bar 2
2 foo 1
3 baz
4 foo 1
5 bar 2

(意思是foo属于第一组重复,bar属于第二组重复,baz不重复.)

我这样做了:

import pandas as pd

df = pd.DataFrame({'A': ('foo', 'bar', 'foo', 'baz', 'foo', 'bar')})

duplicates = df.groupby('A').size()
duplicates = duplicates[duplicates>1]
# Yes, this is ugly, but I didn't know how to do it otherwise:
duplicates[duplicates.reset_index().index] = duplicates.reset_index().index
df.insert(1, 'dgroup_id', df['A'].map(duplicates))

这导致:

>>> df
A dgroup_id
0 foo 1.0
1 bar 0.0
2 foo 1.0
3 baz NaN
4 foo 1.0
5 bar 0.0

有没有更简单/更短的方法来在 Pandas 中实现这一点?我读到也许 pandas.factorize 在这里可以提供帮助,但我不知道如何使用它...(此功能上的 pandas documentation 没有帮助)

此外:我不介意从 0 开始的组计数,也不介意奇怪的排序顺序;但我希望 dgroup_id 为整数,而不是 float 。

最佳答案

您可以通过 get_duplicates() 制作重复项的 list 然后通过 A 设置 dgroup_id索引

def find_index(string):
if string in duplicates:
return duplicates.index(string)+1
else:
return 0

df = pd.DataFrame({'A': ('foo', 'bar', 'foo', 'baz', 'foo', 'bar')})
duplicates = df.set_index('A').index.get_duplicates()
df['dgroup_id'] = df['A'].apply(find_index)
df

输出:

     A  dgroup_id0  foo          21  bar          12  foo          23  baz          04  foo          25  bar          1​

关于python - 如何标记 Pandas 中的重复组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44985154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com