[英]finding unique rows of a pandas Dataframe column for which all the values of a second column are NaN
嗨,我正在努力解決以下問題:
給定帶有列name
和variable
的 dataframe 我想創建 2 個列表:
下面是一個例子
import pandas
import numpy
df = pandas.DataFrame(data=[['x',1],['y',2],['x',4],['z',numpy.nan],
['x',numpy.nan],['y',3],['x',numpy.nan],['z',numpy.nan],],
columns=['name','variable'])
df:
name variable
0 x 1.0
1 y 2.0
2 x 4.0
3 z NaN
4 x NaN
5 y 3.0
6 x NaN
7 z NaN
所需的 output 應該是
list_names_nan = [z]
list_names_not_nan = [x,y]
使用Series.isna
創建一個 boolean 掩碼,然后在此掩碼上使用Series.groupby
並使用all
最后使用此掩碼m
來過濾nan
和not_nan
值:
m = df['variable'].isna().groupby(df['name']).all()
nan, not_nan = m[m].index.tolist(), m[~m].index.tolist()
結果:
['z'] # nan
['x', 'y'] # not_nan
這是使用自定義聚合 function 的另一種方式:
agg = df.groupby('name').agg(lambda x: all(np.isnan(x))).reset_index()
這會生成一個聚合的 dataframe:
name variable
0 x False
1 y False
2 z True
然后你就可以得到False
或True
的名字
list_names_nan = agg.loc[agg['variable']==True]['name'].tolist()
list_names_not_nan = agg.loc[agg['variable']==False]['name'].tolist()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.