gpt4 book ai didi

python - Pandas 在交叉值中找到重复项

转载 作者:太空狗 更新时间:2023-10-30 00:58:50 26 4
gpt4 key购买 nike

我有一个数据框,想要消除具有相同值但在不同列中的重复行:

df = pd.DataFrame(columns=['a','b','c','d'], index=['1','2','3'])
df.loc['1'] = pd.Series({'a':'x','b':'y','c':'e','d':'f'})
df.loc['2'] = pd.Series({'a':'e','b':'f','c':'x','d':'y'})
df.loc['3'] = pd.Series({'a':'w','b':'v','c':'s','d':'t'})

df
Out[8]:
a b c d
1 x y e f
2 e f x y
3 w v s t

行 [1],[2] 的值为 {x,y,e,f},但它们排列成十字形 - 即,如果您将行 [2] 中的 c、d 列与 a、b 交换你会有一个副本。我想删除这些行,只保留一行,以获得最终输出:

df_new
Out[20]:
a b c d
1 x y e f
3 w v s t

我怎样才能有效地实现这一目标?

最佳答案

我认为您需要按 boolean indexing 过滤带有由 numpy.sort 创建的掩码与 duplicated , 反转它使用 ~:

df = df[~pd.DataFrame(np.sort(df, axis=1), index=df.index).duplicated()]
print (df)
a b c d
1 x y e f
3 w v s t

详细信息:

print (np.sort(df, axis=1))
[['e' 'f' 'x' 'y']
['e' 'f' 'x' 'y']
['s' 't' 'v' 'w']]

print (pd.DataFrame(np.sort(df, axis=1), index=df.index))
0 1 2 3
1 e f x y
2 e f x y
3 s t v w

print (pd.DataFrame(np.sort(df, axis=1), index=df.index).duplicated())
1 False
2 True
3 False
dtype: bool

print (~pd.DataFrame(np.sort(df, axis=1), index=df.index).duplicated())

1 True
2 False
3 True
dtype: bool

关于python - Pandas 在交叉值中找到重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48166014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com