2017-08-11 7 views
1

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 B、次いでisnullによって全てNaN Sを見つけます。

次に、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', [])] 
関連する問題