我有一个对称的pandas数据帧。我想删除包含整个数据帧的非零最小值的列和行。
例如,如果您考虑:
A B C D E
A 0 2 1 5 3
B 2 0 7 4 8
C 1 7 0 10 6
D 5 4 10 0 11
E 3 8 6 11 0
我想删除[row A,col C],因此[row C,col A]包含1(最小值)。所以我的预期输出是:
B D E
B 0 4 8
D 4 0 11
E 8 11 0
我能做到的最快的方法是什么?
答案 0 :(得分:3)
IIUC您可以从数据框中选择数据,而不必使用loc
:
mask = ~(df ==1).any()
In [29]: df.loc[mask, mask]
Out[29]:
B D E
B 0 4 8
D 4 0 11
E 8 11 0
修改强>
要从0
以外的数据框中找到最小值,您可以使用两次min
,首先查找列的最小值,然后查找结果Series
的最小值:
In [48]: df[df != 0].min().min()
Out[48]: 1.0
然后你可以在上面的解决方案中传递它:
min_val = df[df != 0].min().min()
mask = ~(df == min_val).any()
In [50]: df.loc[mask, mask]
Out[50]:
B D E
B 0 4 8
D 4 0 11
E 8 11 0