根据不同列上的值排列数据框
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
输入: 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