Python Pandas - 如何在一组行中选择所有列中包含1的最小列数

时间:2016-08-01 20:59:27

标签: python pandas dataframe selection

给出一个文档术语pandas Dataframe。每个单元格由一个出现矩阵表示。

           clover  seed  sowing  stolon
   1489       1     0       0       0
   1488       1     0       0       0
   9677       0     0       1       0
   9996       1     0       0       1
   0557       0     1       0       0
   0564       1     0       0       0
   0958       0     1       1       0
   1272       1     0       0       0
   1965       1     1       1       1
   4326       1     1       1       0
   4531       1     1       1       0
   6026       0     0       1       0
   6030       0     1       0       0

关于第一栏'三叶草'将DataFrame减少到最少3行,在所有列中包含1。在当前示例中,三叶草,种子,播种包含3行1965,4326,4531的1。结果将是:

           clover  seed  sowing  stolon
   1272       1     0       0       0
   1965       1     1       1       1
   4326       1     1       1       0
   4531       1     1       1       0

删除不相关的列:

           clover  seed  sowing
   1272       1     0       0 
   1965       1     1       1
   4326       1     1       1
   4531       1     1       1

对于任意数量的列,如何以有效的方式执行此选择过程。

2 个答案:

答案 0 :(得分:0)

我会这样做:

relevant = ['clover', 'seed', 'sowing']
df[df[relevant].all(1)][relevant]

enter image description here

答案 1 :(得分:0)

另一种可能性是使用df.sum(axis=1)>=3作为掩码。链drop到此:

>>> df[df.sum(axis=1)>=3].drop('stolon', axis=1)
      clover  seed  sowing
1965       1     1       1
4326       1     1       1
4531       1     1       1

为了更加通用:对于n列,将3替换为n。您可以通过传入列表来删除多个列,例如drop(['stolon','seed'])