Python 基于两列的组合选择值最低的行
我甚至不确定这个标题是否有意义 我有一个熊猫数据框,有3列:x,y,time。有几千排。示例如下:Python 基于两列的组合选择值最低的行,python,pandas,min,pandas-groupby,Python,Pandas,Min,Pandas Groupby,我甚至不确定这个标题是否有意义 我有一个熊猫数据框,有3列:x,y,time。有几千排。示例如下: 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
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,但我得到的x和y是一样的
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。因此需要先删除时间相等的行,然后使用您的解决方案:
df = df[df['time'] != 0]
df2 = df.loc[df.groupby("y")["time"].idxmin()]
类似的替代方案,通过以下方式过滤:
或用于:
我认为需要按
x
列进行分组,而不是y
,对吗?不,我需要的是y,不是x。我已经解决了x。我想为y列中的每个元素检索基于x的最小时间。我非常确定“y”上的分组是我需要的。@Geosphere-好的,解决方案已更改。
df = df.query('time != 0')
df2 = df.loc[df.groupby("y")["time"].idxmin()]
df2 = df[df['time'] != 0].sort_values(['y','time']).drop_duplicates('y')