2017-08-11 27 views
1

in dataframe df如何在分組行後找到包含所有nan的列?在數據框中找到包含所有nan的列

In [97]: df 
Out[97]: 
    a b group 
0 NaN NaN a 
1 0.0 NaN a 
2 2.0 NaN a 
3 1.0 7.0 b 
4 1.0 3.0 b 
5 7.0 4.0 b 
6 2.0 6.0 c 
7 9.0 6.0 c 
8 3.0 0.0 c 
9 9.0 0.0 c 

在這種情況下所希望的輸出應是 組:一 - 列:乙

回答

1

使用set_index由第一分組列,然後通過isnull找到所有NaN秒。

然後groupby和集合all。最後由stack重塑和創造新的DataFrame與所有組和列名:

print (df.set_index('group').isnull().groupby('group').all()) 
      a  b 
group    
a  False True 
b  False False 
c  False False 

a = df.set_index('group').isnull().groupby('group').all().stack() 

b = pd.DataFrame(a[a].index.values.tolist(), columns=['group','cols']) 
print (b) 
    group cols 
0  a b 
+0

是它可以過濾只有真正的... – gabboshow

+0

是的,給我時間嗎?。 – jezrael

+0

我嘗試用輸出創建新的'df'。 – jezrael

0

試試這個?

df.groupby('group').sum().unstack()[df.groupby('group').sum().unstack().isnull()].reset_index() 

    level_0 group 0 
0  b  a NaN 
0

您是否正在尋找?即獲得組名稱和值列,作爲全南值

vals = [(i['group'].iloc[0],i.columns[i.isnull().all()].tolist()) for _,i in df.groupby('group')] 

輸出:

 
[('a', ['b']), ('b', []), ('c', [])] 
相關問題