我有一个包含['join key', 'code', 'A', 'B', 'C', 'D']
列的数据框。
join key
是一长串字符,而code
可以等于521,539或其他一些数字。
可以有相同join key
的行。
我希望能够按join key
我的记录进行分组,并且只有code
字段设置为521和539时出现在我的数据框中的所有重复记录。
我不希望那些可能具有相同密钥且code=521
但没有code=539
对应的记录。
一旦我拥有所有重复对,我想应用一个函数compute(x)
,它将该对合并为一行,由['A', 'B']
行和code=521
列组成['C', 'D']
行中的code=539
列。
我似乎无法选择正确的行。我一直在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))
答案 0 :(得分:1)
我认为您需要比较set
并按boolean indexing
过滤:
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