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
在這種情況下所希望的輸出應是 組:一 - 列:乙
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
在這種情況下所希望的輸出應是 組:一 - 列:乙
使用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
試試這個?
df.groupby('group').sum().unstack()[df.groupby('group').sum().unstack().isnull()].reset_index()
level_0 group 0
0 b a NaN
您是否正在尋找?即獲得組名稱和值列,作爲全南值
vals = [(i['group'].iloc[0],i.columns[i.isnull().all()].tolist()) for _,i in df.groupby('group')]
輸出:
[('a', ['b']), ('b', []), ('c', [])]
是它可以過濾只有真正的... – gabboshow
是的,給我時間嗎?。 – jezrael
我嘗試用輸出創建新的'df'。 – jezrael