我有一个包含三列的dataFrame。我想找到带有相同信息的行(无论列中的外观顺序如何)。我想删除所有带有冗余信息的行,但保留第三列中值最小的行:
import pandas as pd
pd.DataFrame({"Dependend variable": ["A", "B", "C"], "Independend variable": ["B", "A", "D"], "pvalue": [0.001, 0.005, 0.001]})
Out[1]:
Dependend variable Independend variable pvalue
0 A B 0.001
1 B A 0.005
2 C D 0.001
获取此dataFrame
是一种很好的pythonic方法Out[]:
Dependend variable Independend variable pvalue
0 A B 0.001
1 C D 0.001
答案 0 :(得分:3)
我认为您可以按numpy.sort
对{2}列进行排序,然后使用sort_values
drop_duplicates
对最小值进行排序:
sort1 = np.sort(df[['Dependend variable','Independend variable']], axis=1)
df[['a','b']] = pd.DataFrame(sort1, index=df.index)
print (df)
Dependend variable Independend variable pvalue a b
0 A B 0.001 A B
1 B A 0.005 A B
2 C D 0.001 C D
df = df.sort_values(['a','b','pvalue']).drop_duplicates(['a','b']).drop(['a','b'],1)
print (df)
Dependend variable Independend variable pvalue
0 A B 0.001
2 C D 0.001
答案 1 :(得分:3)
我建议使用相关列中的值创建一个布尔掩码,并将其传递给数据帧。
df =pd.DataFrame({"Dependend variable": ["A", "B", "C"],
"Independend variable": ["B", "A", "D"], "pvalue": [0.001, 0.005, 0.001]})
cols = ['Dependend variable','Independend variable']
df.sort_values('pvalue',inplace=True)
mask = pd.Series(tuple(sorted(x)) for x in df[cols].values).duplicated(keep=False)
df = df[mask]
print(df)
返回:
Dependend variable Independend variable pvalue
0 A B 0.001
2 C D 0.001
这个小子集的时间比较,对于更大的jezraels可以更快
jezrael:100个循环,最佳3:每循环6.5 ms
jezrael:100个循环,3个最好:每个循环7.74毫秒(大集)* 1000
antonvbr:100个循环,最佳3:3.09毫秒/循环
antonvbr:100个循环,最佳3:12.9毫秒/循环(大集)* 1000