【问题标题】:Get all IDs of repeated rows in dataframe in Pandas在 Pandas 中获取数据框中重复行的所有 ID
【发布时间】:2018-11-14 18:46:09
【问题描述】:

假设我们有一个数据框df,其中包含重复的行。我想存储唯一行的 ID,以便每个行都有一个相关联的整数列表(它们出现在数据框中的 ID)。

让我举个例子:

import numpy as np
import pandas as pd

np.random.seed(0)
m = ['a','b']
M = ['X','Y']
n = np.arange(3)
size = 10
df = pd.DataFrame({'m': np.random.choice(m, size=size, replace=True),
                   'M': np.random.choice(M, size=size, replace=True),
                   'n': np.random.choice(n, size=size, replace=True)})

这会生成以下数据框:

   m  M  n
0  a  Y  2
1  b  X  2
2  b  X  0
3  a  Y  1
4  b  X  1
5  b  X  1
6  b  X  1
7  b  X  0
8  b  X  1
9  b  Y  0

我相信我想做类似df.groupby(df.columns.tolist()).size() 的事情,但我不想获得出现的次数,而是想要获得它们出现的位置。因此,在这种情况下,所需的输出将是(例如以字典形式):

output = {('a','Y',1):[3],
          ('a','Y',2):[0],
          ('b','X',0):[2,7],
          ('b','X',1):[4,5,6,8],
          ('b','X',2):[1],
          ('b','Y',0):[9]
          }

我该怎么做?我们的想法是尽可能高效地执行此操作,因为数据框可以有几列和数千(甚至几百万)行。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    你有groups

    df.groupby(list(df)).groups
    Out[176]: 
    {('a', 'Y', 1): Int64Index([3], dtype='int64'),
     ('a', 'Y', 2): Int64Index([0], dtype='int64'),
     ('b', 'X', 0): Int64Index([2, 7], dtype='int64'),
     ('b', 'X', 1): Int64Index([4, 5, 6, 8], dtype='int64'),
     ('b', 'X', 2): Int64Index([1], dtype='int64'),
     ('b', 'Y', 0): Int64Index([9], dtype='int64')}
    

    【讨论】:

    • 嗯,这很快(而且准确)!谢谢!当网站允许时,我会在 5 分钟内接受答案。
    猜你喜欢
    • 2019-06-01
    • 2017-12-08
    • 2019-08-03
    • 2021-06-13
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多