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

标签 python pandas

我有一个数据框:

>>> 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_id
0  foo          2
1  bar          1
2  foo          2
3  baz          0
4  foo          2
5  bar          1
​

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

相关文章:

python - 对 Python 的 cURL 请求(使用 multipart/form-data)

python - 并行化 Dask 聚合

python - 按索引列的条件过滤 pandas Dataframe 中的值

python - 使用 Python/Pandas 将欧洲格式的收入数字转换为美国格式

python - 如何组合两个具有不同类型索引的数据帧(一个是DatetimeIndex,另一个是PeriodIndex)?

python - 为什么程序总是打开http ://--port=57883/using IEDriverServer IE through Selenium Python

python - 多个 if 和 else 语句

Python:如何过滤字典?

python - 在 Python 中获取文件描述符的位置

python - SQLAlchemy 不创建表