删除包含非零最小值的数据帧的行和列

时间:2016-02-05 16:58:27

标签: python pandas

我有一个对称的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

我能做到的最快的方法是什么?

1 个答案:

答案 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