gpt4 book ai didi

python - 查找仅限于多个范围的重复项 - Pandas

转载 作者:行者123 更新时间:2023-11-28 20:02:02 27 4
gpt4 key购买 nike

假设我们的问题可以这样简化:

df = pd.DataFrame()
df['C_rows'] = ['C1', 'C2', 'C3', 'C2', 'C1', 'C2', 'C3', 'C1', 'C2', 'C3', 'C4', 'C1']
df['values'] = ['customer1', 4321, 1266, 5671, 'customer2', 123, 7344,'customer3', 4321, 4444, 5674, 'customer4']

与表格:

    C_rows  values
0 C1 customer1
1 C2 4321
2 C3 1266
3 C2 5671
4 C1 customer2
5 C2 123
6 C3 7344
7 C1 customer3
8 C2 4321
9 C3 4444
10 C4 5674
11 C1 customer4

我们如何向量化在每个 C1 之间找到重复的 C_rows,即 row3 在第 1 行和第 3 行中出现了重复的 C2。我正在使用的数据集有 50,000 行,每个 C1 之间大约有 15 行。

例如像这样检查重复项:

    C_rows  values
0 C1 customer1
1 C2 4321
2 C3 1266
3 C2 5671

C2 重复

4   C1      customer2
5 C2 123
6 C3 7344

没有重复

7   C1      customer3
8 C2 4321
9 C3 4444
10 C4 5674

没有重复

不使用 for 循环 - 并且快速(矢量化)。

最佳答案

对于非常快速的向量化解决方案,通过 C1 之间的连续值创建新的列,然后检查 duplicated :

df['dupe'] = df.assign(dupe=df['C_rows'].eq('C1').cumsum()).duplicated(['C_rows','dupe'])
print (df)
C_rows values dupe
0 C1 customer1 False
1 C2 4321 False
2 C3 1266 False
3 C2 5671 True
4 C1 customer2 False
5 C2 123 False
6 C3 7344 False
7 C1 customer3 False
8 C2 4321 False
9 C3 4444 False
10 C4 5674 False
11 C1 customer4 False

如果需要过滤器:

df = df[df.assign(dupe=df['C_rows'].eq('C1').cumsum()).duplicated(['C_rows','dupe'])]
print (df)
C_rows values
3 C2 5671

如果要检查重复组:

df = df.assign(dupe=df['C_rows'].eq('C1').cumsum())
a = df.loc[df.duplicated(['C_rows','dupe']), 'dupe']
df['dupe'] = df['dupe'].isin(a)
print (df)
C_rows values dupe
0 C1 customer1 True
1 C2 4321 True
2 C3 1266 True
3 C2 5671 True
4 C1 customer2 False
5 C2 123 False
6 C3 7344 False
7 C1 customer3 False
8 C2 4321 False
9 C3 4444 False
10 C4 5674 False
11 C1 customer4 False

关于python - 查找仅限于多个范围的重复项 - Pandas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48338971/

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