我有一个DataFrame,其行是给定长度的数字数组。我想有效地摆脱那些与其他行相差-1的行。例如,如果我遇到
1 -2 2 4 -4
-1 2 -2 -4 4
然后我要删除其中一个。在Python / Pandas中是否有一种不太昂贵的方法?
答案 0 :(得分:1)
因此,您可以采取一种技巧,
仅当列数奇数
时这样,您可以反转具有大于ceil(n_cols/2.0)
个负值的任何条目的符号,然后执行drop_duplicates
。
from math import ceil
df = pd.read_csv('example_csv.csv')
cols = df.columns
df['n_minus'] = (df<0).sum(axis=1)
df.loc[df['n_minus']>ceil(len(cols)/2.0),cols] = df.loc[df['n_minus']>ceil(len(cols)/2.0),cols]*-1.0
new_df = df[cols].drop_duplicates()