假设我们有一个包含重复行的数据框 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')}
