簡體   English   中英

根據熊貓的兩列組合選擇最低值的行

[英]Selecting rows with lowest values based on combination two columns from pandas

我什至不確定標題是否有意義。

我有一個3列的熊貓數據框: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,但我得到的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。

因此需要先通過boolean indexing刪除time相等的行,然后使用您的解決方案:

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 sort_values使用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM