pandaps:如何只选择一列中键相同但值不同的重复行

2024-04-20 10:39:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含['join key', 'code', 'A', 'B', 'C', 'D']列的数据帧。在

join key是一个长字符串,而code可以等于521539或其他一组数字。在

可以存在具有相同join key的行。在

我希望能够按join key对我的记录进行分组,并且只有那些出现在我的数据帧中的重复记录,code字段同时设置为521和539。在

我不希望那些记录可能具有相同的键和code=521,但没有{}对应项。在

一旦我有了所有的重复项对,我想应用一个函数,compute(x),它将把这一对合并到一个由code=521行中的['A', 'B']列和包含{}行中的['C', 'D']列组成的一行。在

我似乎无法选择正确的行。我一直选择那些在join key上重复的行,但是它们都是相同的代码,没有对应的代码。在

import pandas as pd
exp_csv = pd.DataFrame([[3566190983, 521, 1, 2, 3, 4], \
                        [3566190983, 539, 1, 2, 3, 4], \
                        [3509730366, 521, 1, 2, 3, 4], \
                        [3509730366, 521, 1, 2, 3, 4], \
                        [3509730366, 521, 1, 2, 3, 4], \
                        [9809730686, 500, 1, 2, 3, 4]],\
                        columns=['join key', 'code', 'A', 'B', 'C', 'D'])

interim = exp_csv[exp_csv.duplicated(['join key'], keep=False)]
interim = interim.loc[(interim['code'] == 521) | (interim['code'] == 539)]
interim = interim.groupby(by='join key').apply(lambda x: compute(x))

Tags: csv数据key函数字符串代码import记录
1条回答
网友
1楼 · 发布于 2024-04-20 10:39:43

我相信您需要比较sets并按^{}筛选:

mask = exp_csv.groupby('join key')['code'].transform(lambda x: set(x) == set([521, 539]))
interim = exp_csv[mask]
print (interim)
     join key  code  A  B  C  D
0  3566190983   521  1  2  3  4
1  3566190983   539  1  2  3  4

相关问题 更多 >