【发布时间】:2021-12-11 21:00:20
【问题描述】:
基于这个问题:find duplicated groups in dataframe 和这个数据框
df = pd.DataFrame({'id': ['A', 'A', 'A', 'A', 'B', 'B', 'C', 'C', 'C', 'C', 'D', 'D', 'D'],
'value1': ['1', '2', '3', '4', '1', '2', '1', '2', '3', '4', '1', '2', '3'],
'value2': ['1', '2', '3', '4', '1', '2', '1', '2', '3', '4', '1', '2', '3'],
'value3': ['1', '2', '3', '4', '1', '2', '1', '2', '3', '4', '1', '2', '3'],
})
如何在附加列中的此数据框中通过唯一标签标记重复的不同重复组(在值列中),例如一个重复组的“1”,下一个重复组的“2”等等?我在 slack 上找到了示例,将它们识别为真假,但一个只有“ngroup”,但没有用。
我的真实示例有 20 多列,中间还有 NaN。我已经通过 pivot_table 从原始长格式创建了宽格式,因为我认为从宽格式中获取重复的条目会更好。应在 N-1 列中找到重复项,我通过在列表理解中使用子集来总结这些名称,不包括此标识符列
这就是我目前所拥有的:
df = df_long.pivot_table(index="Y",columns="Z",values="value").reset_index()
subset = [c for c in df.columns if not c=="id"]
df = df.loc[df.duplicated(subset=subset,keep=False)].copy()
我们使用 pandas 0.22,如果这很重要的话。
问题是,当我使用时
for i, group in df.groupby(subset):
print(group)
我基本上不回任何组。
【问题讨论】:
-
df['duplicated']= df.groupby(['value1','value2','value3']).ngroup() -
当然,您需要从数据框构造函数中删除
duplicated,因为您不能将空列表作为列值。 -
我已经在我的真实数据集上尝试过,但在所有行中只得到相同的标签“-1”。但是,由于我已经创建了带有重复 (keep=False) 的 df,因此我希望得到不同的标签。
-
我删除了上面示例中的“重复”,因为我的真实数据框中也没有它。
标签: python pandas duplicates