gpt4 book ai didi

python - 根据 pandas 的组合两列选择具有最低值的行

转载 作者:行者123 更新时间:2023-12-01 02:02:18 30 4
gpt4 key购买 nike

我什至不确定这个标题是否有意义。

我有一个包含 3 列的 pandas 数据框:x、y、时间。有几千行。下面的例子:

       x      y    time
0 225 0 20.295270
1 225 1 21.134015
2 225 2 21.382298
3 225 3 20.704367
4 225 4 20.152735
5 225 5 19.213522
.......
900 437 900 27.748966
901 437 901 20.898460
902 437 902 23.347935
903 437 903 22.011992
904 437 904 21.231041
905 437 905 28.769945
906 437 906 21.662975
.... and so on

我想要做的是检索与 x 和 y 相关的时间最小的那些行。基本上对于 y 上的每个元素,我想找到具有最小时间值的,但我想排除那些时间为 0.0 的元素。当 x 与 y 的值相同时,就会发生这种情况。

例如,到达 y-0 的最快方法是从 x-225 开始,依此类推,因此可能会出现 x 重复自身但 y 不同的情况。

e.g. 
x y time
225 0 20.295270
438 1 19.648954
27 20 4.342732
9 438 17.884423
225 907 24.560400

到目前为止,我尝试了 groupby,但我只得到与 y 相同的 x。

print(df.groupby('id_y', sort=False)['time'].idxmin())

y
0 0
1 1
2 2
3 3
4 4

下面的只是返回我已经拥有的 df。

df.loc[df.groupby("id_y")["time"].idxmin()]

只是想指出一件事,如果还有其他非常好的方法,我愿意接受各种选择,而不仅仅是 groupby。

最佳答案

因此需要先删除 time 等于 boolean indexing 的行然后使用您的解决方案:

df = df[df['time'] != 0]
df2 = df.loc[df.groupby("y")["time"].idxmin()]

类似的替代方案,通过 query 进行过滤:

df = df.query('time != 0')
df2 = df.loc[df.groupby("y")["time"].idxmin()]

或者使用sort_valuesdrop_duplicates :

df2 = df[df['time'] != 0].sort_values(['y','time']).drop_duplicates('y')

关于python - 根据 pandas 的组合两列选择具有最低值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49478545/

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