根据不同列上的值排列数据框

Arrange dataframe based on values on different columns

输入: df如下:

appl_id  CNET   CCON    SCORE   DER   TOL_TNW
863793   42.6   4       752     0.4   1.8
863487   0      1       761.5   0.6   2.6
863487   0      1       770     0.6   2.6
863283   0      NaN     691     1.9   7.3
863283   0      5       691     NaN   7.3
900555   NaN    NaN     650     0     NaN

输出查找:

关于appl_id列中的不同值需要连接到列表 如果值相似则保留

appl_id  CNET   CCON    SCORE       DER   TOL_TNW
863793   42.6   4       752         0.4   1.8
863487   0      1       [761.5,770] 0.6   2.6
863283   0      5       691         1.9   7.3
900555   NaN    NaN     650         0     NaN

我试过

df.set_index('appl_id').T \
  .apply(lambda x: x.shift(len(x) - x.index.get_loc(x.last_valid_index()) - 1)).T

但没有解决我的目的。谁能有更好的建议如何做到这一点?

GroupBy.agg 中使用自定义 lambda 函数将值转换为集合并删除缺失值,next 用于添加默认值 np.nan 如果 out 为空集:

def f(x):
    out = set(x.dropna())
    return list(out) if len(out) > 1 else next(iter(out), np.nan)
df = df.groupby('appl_id').agg(f).reset_index()
print (df)
   appl_id  CNET  CCON           SCORE  DER  TOL_TNW
0   863283   0.0   5.0           691.0  1.9      7.3
1   863487   0.0   1.0  [761.5, 770.0]  0.6      2.6
2   863793  42.6   4.0           752.0  0.4      1.8
3   900555   NaN   NaN           650.0  0.0      NaN