Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于两列的组合选择值最低的行_Python_Pandas_Min_Pandas Groupby - Fatal编程技术网

Python 基于两列的组合选择值最低的行

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

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

我有一个熊猫数据框,有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   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')