在数据框中查找列的共现

时间:2017-01-17 19:29:37

标签: python pandas dataframe

我有一个包含数千列的数据框。大多数列具有仅与其他列共存的值。例如:

A       | B    | C
Null    |"val" |"other"
"random"|"rand"| Null

在这个例子中,我想要一个输出告诉我:

  • 与B
  • 共存的色谱柱
  • B柱与A和C共同发生
  • C柱与B
  • 共存

我可以写一些循环并为每一列做一些sql,但它真的很贵。

我使用python和任何可以提供帮助的库或代码:)

很抱歉,如果使用错误的术语来描述问题...

谢谢

1 个答案:

答案 0 :(得分:1)

我不知道是否有一种很好的方法可以在不迭代列的情况下执行此操作。我想我只是做这样简单的事情:

np.random.seed(13)
df=pd.DataFrame(np.random.choice([np.nan,1,2],9).reshape([3,3]), columns=list('abc'))

     a    b    c
0  2.0  NaN  2.0
1  NaN  2.0  2.0
2  NaN  1.0  NaN

cols = df.columns
for i in cols:
    for j in cols.drop(i):
        print( 'percent of', j, 'not null if', i, 'is not null:', 
               (df[i].notnull() & df[j].notnull()).sum() / df[i].notnull().sum())

percent of b not null if a is not null: 0.0
percent of c not null if a is not null: 1.0
percent of a not null if b is not null: 0.0
percent of c not null if b is not null: 0.5
percent of a not null if c is not null: 0.5
percent of b not null if c is not null: 0.5

因此,如果百分比为0.0,则共同出现零,如果百分比为1.0,则完全共现。

但请注意,列不一定与此方法对称。如果" a"是非空的,那么" c"也将是非空的,但在这种情况下反之亦然。

显然,你可以在这里使用其他定义,这对我来说是最自然的。