[英]How to label duplicated groups in a pandas 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 上找到了一些示例,将它们识别为 false 和 true,但只有一个带有“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)
我基本上不回任何组。
groupby_ngroup
建议使用 groupby_ngroup:
df['duplicated'] = df.groupby(df.filter(like='value').columns.tolist()).ngroup()
print(df)
# Output:
id value1 value2 value3 duplicated
0 A 1 1 1 0 # Group 0 (all 1)
1 A 2 2 2 1
2 A 3 3 3 2
3 A 4 4 4 3
4 B 1 1 1 0 # Group 0 (all 1)
5 B 2 2 2 1
6 C 1 1 1 0 # Group 0 (all 1)
7 C 2 2 2 1
8 C 3 3 3 2
9 C 4 4 4 3
10 D 1 1 1 0 # Group 0 (all 1)
11 D 2 2 2 1
12 D 3 3 3 2
好的,上面的最后一条评论是正确的提示:我真实数据中的 NaN 是问题所在,groupby 也不允许识别组。 通过在使用 groupby 之前使用 fillna(),可以识别组并且 ngroup 确实将组号添加给我。
df['duplicated'] = df.fillna(-1).groupby(df.filter(like='value').columns.tolist()).ngroup()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.