什么是在给定的DataFrame中查找相同行的索引而不迭代各行的pandas方法?
虽然可以找到具有unique = df [df.duplicated()]的所有唯一行,然后使用unique.iterrows()迭代唯一条目,并在pd.where()的帮助下提取相等条目的索引,这是熊猫的做法吗?
例:
给定以下结构的DataFrame:
| param_a | param_b | param_c
1 | 0 | 0 | 0
2 | 0 | 2 | 1
3 | 2 | 1 | 1
4 | 0 | 2 | 1
5 | 2 | 1 | 1
6 | 0 | 0 | 0
输出:
[(1, 6), (2, 4), (3, 5)]
最佳答案 对所有欺骗行使用参数
duplicated
和keep = False,然后按所有列分组并将索引值转换为元组,最后将输出系列转换为列表:
df = df[df.duplicated(keep=False)]
df = df.groupby(df.columns.tolist()).apply(lambda x: tuple(x.index)).tolist()
print (df)
[(1, 6), (2, 4), (3, 5)]
如果你还想看到重写值:
df1 = (df.groupby(df.columns.tolist())
.apply(lambda x: tuple(x.index))
.reset_index(name='idx'))
print (df1)
param_a param_b param_c idx
0 0 0 0 (1, 6)
1 0 2 1 (2, 4)
2 2 1 1 (3, 5)