假设我有以下数据帧:
d = {'store': ['s1', 's1', 's2', 's2',], 'code': ['a', 'b', 'a', 'b'], 'range': [1, 2, 3,2]}
df = pd.DataFrame(data=d)
print(df)
store code range
0 s1 a 1
1 s1 b 2
3 s2 a 3
4 s2 b 2 对于每个商店,我希望选择范围最接近所选值n的代码,例如n=3
结果如下所示:
store code range
0 s1 b 2
1 s2 a 3 有几个小细节需要注意,在实际的数据集范围内不是一个整数,它是一个双精度的,每个商店有三个代码(a,b,c),为了简单起见,这里只显示了两个。
发布于 2021-06-20 08:15:34
尝试从range中减去n值,然后在df['store']上使用groupby idxmin获得每个商店的min值的索引
n = 3
new_df = (
df.loc[(df['range'] - n).abs().groupby(df['store']).idxmin()]
.reset_index(drop=True)
) store code range
0 s1 b 2
1 s2 a 3发布于 2021-06-20 08:15:07
尝试:
n = 3
df.loc[df.assign(diff=(df['range']-n).abs()).groupby('store')['diff'].idxmin()]输出:
store code range
1 s1 b 2
2 s2 a 3https://stackoverflow.com/questions/68051653
复制相似问题