G F*_*G F 4 python dataframe pandas
假设我有这个数据框:
my_df = pd.DataFrame({'A':[np.nan,np.nan,'gate','ball'],'B':['car',np.nan,np.nan,np.nan],'C':[np.nan,'edge',np.nan,np.nan],'D':['id1','id1','id1','id2']})
In [176]: my_df
Out[176]:
A B C D
0 NaN car NaN id1
1 NaN NaN edge id1
2 gate NaN NaN id1
3 ball NaN NaN id2
Run Code Online (Sandbox Code Playgroud)
我想按“ D”列分组并忽略NaN。预期产量:
A B C
D
id1 gate car edge
id2 ball NaN NaN
Run Code Online (Sandbox Code Playgroud)
我的解决方案是用空字符填充NaN并采用最大值:
In [177]: my_df.fillna("").groupby("D").max()
Out[177]:
A B C
D
id1 gate car edge
id2 ball
Run Code Online (Sandbox Code Playgroud)
是否有没有fillna(“”)的其他解决方案?
将自定义函数与一起使用dropna,但对于空值,请添加NaNs:
print (my_df.groupby("D").agg(lambda x: np.nan if x.isnull().all() else x.dropna()))
A B C
D
id1 gate car edge
id2 ball NaN NaN
Run Code Online (Sandbox Code Playgroud)
具有自定义功能的类似解决方案:
def f(x):
y = x.dropna()
return np.nan if y.empty else y
print (my_df.groupby("D").agg(f))
A B C
D
id1 gate car edge
id2 ball NaN NaN
Run Code Online (Sandbox Code Playgroud)