我有一個DataFrame
df
:鏈運營商識別值,其中記錄是最接近數
id Volume time_norm time_norm_ratio speed BPR_free_speed free_flow_speed capacity_speed dev_free_flow
9SOUTHBOUND 1474 85 1.794392523 8.947916667 17.88 16.05607477 8.028037383 0.919879283
9SOUTHBOUND 1375 17 1.158878505 13.85483871 17.88 16.05607477 8.028037383 5.826801327
9SOUTHBOUND 1052 22 1.205607477 13.31782946 17.88 16.05607477 8.028037383 5.289792074
9SOUTHBOUND 986 21 1.196261682 13.421875 17.88 16.05607477 8.028037383 5.393837617
9SOUTHBOUND 1071 15 1.140186916 14.08196721 17.88 16.05607477 8.028037383 6.05392983
9SOUTHBOUND 1206 34 1.317757009 12.18439716 17.88 16.05607477 8.028037383 4.15635978
9SOUTHBOUND 1222 34 1.317757009 12.18439716 17.88 16.05607477 8.028037383 4.15635978
9SOUTHBOUND 1408 33 1.308411215 12.27142857 17.88 16.05607477 8.028037383 4.243391188
9SOUTHBOUND 1604 69 1.644859813 9.761363636 17.88 16.05607477 8.028037383 1.733326253
9SOUTHBOUND 1731 124 2.158878505 7.437229437 17.88 16.05607477 8.028037383 -0.590807946
9SOUTHBOUND 1596 640 6.981308411 2.299866131 17.88 16.05607477 8.028037383 -5.728171252
9NORTHBOUND 449 17 1.17 14.66666667 17.88 17.16 8.58 6.086666667
9NORTHBOUND 299 17 1.17 14.66666667 17.88 17.16 8.58 6.086666667
9NORTHBOUND 241 18 1.18 14.54237288 17.88 17.16 8.58 5.962372881
9NORTHBOUND 164 13 1.13 15.18584071 17.88 17.16 8.58 6.605840708
9NORTHBOUND 142 16 1.16 14.79310345 17.88 17.16 8.58 6.213103448
9NORTHBOUND 137 15 1.15 14.92173913 17.88 17.16 8.58 6.34173913
9NORTHBOUND 196 13 1.13 15.18584071 17.88 17.16 8.58 6.605840708
我想找到volume
當速度是每個id
最大速度的50%。爲了做到這一點,我找到了每個ID的最大速度(free_flow_speed
),計算了50%,並將其設置爲free_flow_speed
。爲了確定哪個記錄最接近50%,我創建了dev_free_flow
列,這是給定的speed
和free_flow_speed
之間的差值。找到最接近於零的記錄,對於每個id
,應該標識要歸因於cap_design
值的記錄。
因此,我想要創建一個新列cap_design
這是volume
當diff
是最接近零,爲每個id
。
從我的最後一個問題,SO(我不是有一個美好的一天在這裏)我已經創建:
df['cap_design'] = df['Volume'].where(df.groupby('id')['diff'].transform('min'))
然而,這將返回Volume
每該行的cap_design
值,而不是體積dev_free_flow
,每id
最接近零值。我如何實現這一目標?