示例:
| param_a | param_b | param_c
1 | 0 | 0 | 0
1 | 0 | 2 | 1
3 | 2 | 1 | 1
4 | 0 | 2 | 1
3 | 2 | 1 | 1
4 | 0 | 0 | 0
4 | 0 | 0 | 0
对于重复的索引(1,3,4),我想在每个索引不同的地方找到它们。以索引1和4为例,存在不同的索引。
输出:
param_a param_b param_c
1 0 0 0
1 0 2 1
4 0 2 1
4 0 0 0
注意:它为每个重复的索引返回唯一索引。
我推荐了this post,但没有得到答案。
答案 0 :(得分:3)
IIUC,使用tuple
,在reset_index
获得df中的所有值作为组密钥之后,然后我们用transform
nunique
过滤df,然后再过滤{{1 }}
drop_duplicates
答案 1 :(得分:2)
首先将索引转换为列,并用DataFrame.drop_duplicates
删除重复项,然后用index
和Series.duplicated
用boolean indexing
获取每列keep=False
的所有重复项:>
df = df.reset_index().drop_duplicates()
print (df)
index param_a param_b param_c
0 1 0 0 0
1 1 0 2 1
2 3 2 1 1
3 4 0 2 1
6 4 0 0 0
print (df['index'].duplicated(keep=False))
0 True
1 True
2 False
3 True
6 True
Name: index, dtype: bool
df1 = df[df['index'].duplicated(keep=False)].set_index('index').rename_axis(None)
print (df1)
param_a param_b param_c
1 0 0 0
1 0 2 1
4 0 2 1
4 0 0 0
答案 2 :(得分:1)
我对duplicated
进行了这种尝试:(还有参数using (ZipFile archive = new ZipFile(@"" + System.Environment.CurrentDirectory + "\\thezipfile.zip"))
{
archive.ExtractAll(@"" + System.Environment.CurrentDirectory, ExtractExistingFileAction.OverwriteSilently);
}
用于保留重复项或不重复):
keep
df=df.reset_index()
mask = pd.DataFrame(np.sort(df[list(df)], axis=1), index=df.index).duplicated()
df1 = df[~mask]
df1=df1.set_index('index')
如果您尝试保留重复项:
param_a param_b param_c
1 0 0 0
1 0 2 1
3 2 1 1
4 0 2 1
3 2 1 1
4 0 0 0
4 0 0 0
index param_a param_b param_c
0 1 0 0 0
1 1 0 2 1
2 3 2 1 1
3 4 0 2 1
4 3 2 1 1
5 4 0 0 0
6 4 0 0 0
param_a param_b param_c
index
1 0 0 0
1 0 2 1
3 2 1 1
4 0 2 1
4 0 0 0
您将以结果结尾:
mask = pd.DataFrame(np.sort(df[list(df)], axis=1), index=df.index).duplicated(keep=False)
哪个再次关闭,但由于存在:
param_a param_b param_c
index
1 0 0 0
1 0 2 1
4 0 2 1
在帐户中,因为它有重复的行(索引为4),并且应该是因为存在另一行的起始索引为4。
这很接近,但这是直接的方法。