私は、DFデータフレームを使用している場合:パンダ:最大値を見つけ、ときに条件が
id volume saturation time_delay_normalised speed BPR_free_speed BPR_speed Volume time_normalised
27WESTBOUND 580 0.351515152 57 6.54248366 17.88 15.91366177 580 1.59375
27WESTBOUND 588 0.356363636 100 5.107142857 17.88 15.86519847 588 2.041666667
27WESTBOUND 475 0.287878788 64 6.25625 17.88 16.51161331 475 0.666666667
27EASTBOUND 401 0.243030303 59 6.458064516 17.88 16.88283672 401 1.0914583333
27EASTBOUND 438 0.265454545 46 7.049295775 17.88 16.70300418 438 1.479166667
27EASTBOUND 467 0.283030303 58 6.5 17.88 16.55392848 467 0.9604166667
私は、ときID
ごとに、free_capacity
を新しい列を作成し、Volume
の最大値として設定したいですtime_normalised
はtime_normalised条件を考慮せずに1.1
以下であり、私はこれを行うことができます。
df['free_capacity'] = df.groupby('id')["Volume"].transform('max')
はどのように行いますtime_normalised <= 1.1
の条件を追加しますか?
EDIT
@jezraelが示唆次与え
df.loc[df['time_normalised'] <= 1.1, 'free_capacity'] = df.loc[df['time_normalised'] <= 1.1].groupby('id')["Volume"].transform('max')
:
id volume saturation time_delay_normalised speed \
27WESTBOUND 580 0.351515 57 6.542484
27WESTBOUND 588 0.356364 100 5.107143
27WESTBOUND 475 0.287879 64 6.256250
27EASTBOUND 401 0.243030 59 6.458065
27EASTBOUND 438 0.265455 46 7.049296
27EASTBOUND 467 0.283030 58 6.500000
BPR_free_speed BPR_speed Volume time_normalised free_capacity
17.88 15.913662 580 1.593750 NaN
17.88 15.865198 588 2.041667 NaN
17.88 16.511613 475 0.666667 475.0
17.88 16.882837 401 1.091458 467.0
17.88 16.703004 438 1.479167 NaN
17.88 16.553928 467 0.960417 467.0
は、しかし、私はまだid
したがって、私は試しました:
ただし、この結果でもNaN値が発生します。 1.1 time_normalised条件は、アプリケーションを限定するものではなく、値を見つけるための条件です。あなたがtransform
でSeries
df['id']
によって条件によるフィルタリングのためのwhere
を使用して、groupby
でき
id volume saturation time_delay_normalised speed \
27WESTBOUND 580 0.351515 57 6.542484
27WESTBOUND 588 0.356364 100 5.107143
27WESTBOUND 475 0.287879 64 6.256250
27EASTBOUND 401 0.243030 59 6.458065
27EASTBOUND 438 0.265455 46 7.049296
27EASTBOUND 467 0.283030 58 6.500000
BPR_free_speed BPR_speed Volume time_normalised free_capacity
17.88 15.913662 580 1.593750 475.0
17.88 15.865198 588 2.041667 475.0
17.88 16.511613 475 0.666667 475.0
17.88 16.882837 401 1.091458 467.0
17.88 16.703004 438 1.479167 467.0
17.88 16.553928 467 0.960417 467.0
[これ](http://stackoverflow.com/questions/11869910/pandas-filter-rows-of-dataframe-with-operator-chaining)が非常にあります同様の問題 - 基本的には、右側の最初のdf選択で時間正規化基準を連鎖させることになります。 –
パンダインデックスが混乱を招くように削除しました。最初の3つのIDは '27WESTBOUND'で、最後の3つは' 27EASTBOUND'です。したがって、グループ化は、idごとのVolumeの最大値をtime_normalisedによって制限することを意図しています。これはもっと明確ですか? – LearningSlowly