gpt4 book ai didi

python - 根据两列进行排序并将值分配给新列

转载 作者:太空宇宙 更新时间:2023-11-03 14:12:42 28 4
gpt4 key购买 nike

我有一个数据框作为df(使用pandas模块创建):

     ID   Distance
0 105 86.7
1 105 60.5
2 106 48.3
3 106 14.1
4 106 37.2
5 106 30.8

我正在尝试创建一个列(“Score”)来表示基于相同“ID”的最小距离的分数。

换句话说,对于具有相同“ID”的对象,应用以下规则;

如果对象具有最小距离,“Score” 将得到值“4”。

如果对象具有第二个最小距离,“Score” 将获得值“2”。

如果对象具有第三个最小距离,“Score” 将获得值“1”。

如果对象有第 4 个和第 n 个。最小距离,“Score” 将得到值“0”。

这是我期望的Out_df:

     ID   Distance  Score
0 105 86.7 2
1 105 60.5 4
2 106 48.3 0
3 106 14.1 4
4 106 37.2 1
5 106 30.8 2

我需要帮助来排序问题。

最佳答案

你可以使用

  1. groupby获取每个ID
  2. 的子DataFrame
  3. nsmallest识别这些阈值元素。
  4. transform获取每个子数据帧并获得分数。

代码:

def my_sort(s):
d = dict(zip(s.nsmallest(3), [4, 2, 1]))
return [d.get(v, 0) for v in s]

df['Score'] = df.groupby('ID').transform(my_sort)

查看 pandas groupby docs有用的 groupby 习语。

关于python - 根据两列进行排序并将值分配给新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48385692/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com