![](/img/trans.png)
[英]Selecting rows from a Dataframe based on values from multiple columns in pandas
[英]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_values
與drop_duplicates
sort_values
使用:
df2 = df[df['time'] != 0].sort_values(['y','time']).drop_duplicates('y')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.