我是python和pandas的新手。
我想得到Y
每个 peak
的值与最小的 gap
到目前为止,这是我的代码,它很长而且很傻
for i in df.peaks.unique():
min_y= df[df['peaks'] == i][df['gap'] == min(df[df['peaks'] == i]['gap'])]['y'].tolist()[0]
print(min_y)
它有效,结果如下:171
204
246
278
311
416
因为,我看到了一些人们使用 apply
的高级语法。 , map
,所以他们不需要 loop
,我的任务可以应用那些技术吗?顺便说一句,我想改进我的代码,请帮忙!DataFrame 在下面供您引用。
x y w h peaks gap 0 79 171 13 14 178.0 7.0 1 155 171 14 14 178.0 7.0 2 213 170 14 15 178.0 8.0 3 281 171 14 14 178.0 7.0 4 337 171 14 14 178.0 7.0 5 78 203 14 14 211.0 8.0 6 209 204 14 14 211.0 7.0 7 287 204 15 14 211.0 7.0 8 365 204 14 13 211.0 7.0 9 78 236 14 14 251.0 15.0 10 156 246 14 13 251.0 5.0 11 232 246 14 14 251.0 5.0 12 79 277 14 14 284.0 7.0 13 166 278 14 14 284.0 6.0 14 243 278 13 14 284.0 6.0 15 79 303 14 14 316.0 13.0 16 144 310 15 13 316.0 6.0 17 216 310 13 14 316.0 6.0 18 292 311 14 13 316.0 5.0 19 370 311 14 14 316.0 5.0 20 80 405 14 14 420.0 15.0 21 157 414 13 14 420.0 6.0 22 226 414 14 14 420.0 6.0 23 303 416 14 13 420.0 4.0 24 374 416 14 14 420.0 4.0
最佳答案
您可以使用 groupby
并将其与 idxmin
结合使用
data.loc[data.groupby('peaks')['gap'].idxmin(), 'y']
# 0 171
# 6 204
# 10 246
# 13 278
# 18 311
# 23 416
# Name: y, dtype: int64
关于python - 按A列过滤DataFrame的最佳方法,B列条件并给出C列的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62968785/