识别 pandas 中的重复组

问题描述 投票:0回答:1

假设我有以下数据

df = pd.DataFrame({
    'task_id': [1, 1, 1, 1, 2, 2, 2, 2],
    'job_id': [1, 1, 2, 2, 0, 0, 1, 1],
    'filename': ['filename1', 'filename2', 'filename33', 'filename2342', 'filename1', 'filename2', 'filename33', 'filename5']
})
   task_id  jobs_id      filename
0        1        1     filename1
1        1        1     filename2
2        1        2    filename33
3        1        2  filename2342
4        2        0     filename1
5        2        0     filename2
6        2        1    filename33
7        2        1     filename5

我想识别包含完全相同的文件名(不多不少的文件名)的对(

task_id
jobs_id
)。就我而言,结果应该是
[((1, 1), (2, 0), )]
,因为它们恰好包含 (
filename1
,
filename2
)。

我想我必须分组然后使用frozenset,如

df.groupby(['task_id', 'jobs_id'])['filename'].apply(lambda x: frozenset(x))
task_id  jobs_id
1        1              (filename1, filename2)
         2          (filename33, filename2342)
2        0              (filename1, filename2)
         1             (filename33, filename5)
Name: filename, dtype: object
python pandas
1个回答
0
投票
tmp = (df.groupby(['task_id', 'job_id'])['filename']
         .agg(frozenset)[lambda x: x.duplicated(keep=False)]
)

out = pd.DataFrame(tmp.index).groupby(tmp.values)[0].agg(tuple)

(filename2, filename1)    ((1, 1), (2, 0))
Name: 0, dtype: object
© www.soinside.com 2019 - 2024. All rights reserved.