我有一个dataframe (df1)如下:
emg prv name
0 NDJ prv_NS beta_123
1 NDJ prv_NS NaN
2 NDJ prv_NS beta
3 HCO prv_NS alpha123
4 HCO prv_NS NaN
5 H135Y prv_NS NaN
6 TOY1 prv_NS alpha_12
我想将同一个emg
的所有名称组合起来。因此输出应该如下所示:
emg prv name
0 NDJ prv_NS beta_123/beta
3 HCO prv_NS alpha123
5 H135Y prv_NS NaN
6 TOY1 prv_NS alpha_12
如果没有任何EMG的名称,我将只保留NaN,如果有,只需将行连接在一起。
我的解决方案是使用groupby和unique,如下所示:df1.groupby('emg').name.apply(lambda x: '/'.join(set(x.str))).reset_index
但是我好像错了说:df1.groupby('emg').name.apply(lambda x: '/'.join(set(x.str))).reset_index
有更好的方法来做我做的事吗?
发布于 2022-01-14 19:49:24
考虑两种不同的情况:当一个组只有NaN和至少有一个非NaN名称时:
df.groupby('emg').name.apply(lambda x:
'/'.join(x.dropna().unique()) # at least one non-NaN <---\
if x.notna().any() # the condition check ---->-----------|
else np.nan # only NaN's <-------------------------------/
).reset_index()
# emg name
#0 H135Y NaN
#1 HCO alpha123
#2 NDJ beta_123/beta
#3 TOY1 alpha_12
https://stackoverflow.com/questions/70715676
复制相似问题