gpt4 book ai didi

python - 用 Pandas 数据框中最近邻居的值替换值

转载 作者:太空狗 更新时间:2023-10-29 20:50:50 25 4
gpt4 key购买 nike

我在为 pandas 数据框中的某些行获取最接近的值并用这些行的值填充另一列时遇到问题。

我有的数据样本:

id   su_id  r_value  match_v

A A1 0 1
A A2 0 1
A A3 70 2
A A4 120 100
A A5 250 3
A A6 250 100
B B1 0 1
B B2 30 2

问题是,只要 match_v 等于 100,我就需要用 行中的值替换 100 >r_value 最接近原始行的 r_value(其中 match_v 等于 100),但仅与组(分组通过 id)

预期输出

id   su_id  r_value  match_v

A A1 0 1
A A2 0 1
A A3 70 2
A A4 120 2
A A5 250 3
A A6 250 3
B B1 0 1
B B2 30 2

我曾尝试使用 shift 创建前导和边,然后找出不同之处。但效果不佳,并且不知何故搞砸了已经很好的值(value)。我没有尝试任何其他方法,因为我真的不知道。

欢迎任何帮助或提示,如果您需要任何其他信息,我就在这里。

提前致谢。

最佳答案

更像是merge_asof

s=df.loc[df.match_v!=100]
s=pd.merge_asof(df.sort_values('r_value'),s.sort_values('r_value'),on='r_value',by='id',direction='nearest')
df['match_v']=df['su_id'].map(s.set_index('su_id_x')['match_v_y'])
df
Out[231]:
id su_id r_value match_v
0 A A1 0 1
1 A A2 0 1
2 A A3 70 2
3 A A4 120 2
4 A A5 250 3
5 A A6 250 3
6 B B1 0 1
7 B B2 30 2

这是另一种使用 numpy broadcast 的方式,构建加速计算

l=[]
for x , y in df.groupby('id'):
s1=y.r_value.values
s=abs((s1-s1[:,None])).astype(float)
s[np.tril_indices(s.shape[0], 0)] = 999999
s=s.argmin(0)
s2=y.match_v.values
l.append(s2[s][s2==100])
df.loc[df.match_v==100,'match_v']=np.concatenate(l)
df
Out[264]:
id su_id r_value match_v
0 A A1 0 1
1 A A2 0 1
2 A A3 70 2
3 A A4 120 2
4 A A5 250 3
5 A A6 250 3
6 B B1 0 1
7 B B2 30 2

关于python - 用 Pandas 数据框中最近邻居的值替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56378627/

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