Skip to main content
 首页 » 编程设计

python之获取 Pandas 数据框中重复行的所有ID

2025年05月04日19qq号

假设我们有一个包含重复行的数据框 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()的事情,但我想得到的不是出现次数,而是< em>位置 它们出现的位置。因此,在这种情况下,所需的输出将是(例如以字典形式):

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] 
          } 

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

请您参考如下方法:

你有组

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')}