0
に他の行を取得:パンダは、次のデータフレームを考えるグループ
import pandas as pd
import numpy as np
d=pd.DataFrame({' ID':[1,1,1,1,2,2,2,2],
'Benefit':['M','M','M','M','M','M','M','M'],
'CED':[1,2,3,4,1,2,3,4],
'CTD':[np.nan,np.nan,7,8,np.nan,np.nan,np.nan,np.nan],
'CED_Rank':[4,3,2,1,4,3,2,1],
'CED_Max':[4,4,4,4,4,4,4,4]})
d
ID Benefit CED CED_Max CED_Rank CTD
0 1 M 1 4 4 NaN
1 1 M 2 4 3 NaN
2 1 M 3 4 2 7
3 1 M 4 4 1 8
4 2 M 1 4 4 NaN
5 2 M 2 4 3 NaN
6 2 M 3 4 2 NaN
7 2 M 4 4 1 NaN
CED_Maxは、IDと利益のためにグループごとの最大CED値です。
CED_Rankは、IDとBenefitのグループごとのCED値の順位です。
I「がCTD」列にNaN値を更新するために、以下の条件を使用したい: 列内の指定されたIDおよび利点は、グループ化:
CTDがnullで、
場合
CEDが、その後... CED_Max
に等しくない:
CTDは、次に高いCED_Rank値(最高ランク= 1)を持つ行のCEDと等しくなければなりません。事前に
ID Benefit CED CED_Max CED_Rank CTD
0 1 M 1 4 4 2
1 1 M 2 4 3 3
2 1 M 3 4 2 7
3 1 M 4 4 1 8
4 2 M 1 4 4 2
5 2 M 2 4 3 3
6 2 M 3 4 2 4
7 2 M 4 4 1 NaN
ありがとう:ここ
は、所望の結果です!
「CEDがCED_Maxと等しくない」、あなたはオーバーshift' '後にそれを書くことができ、この部分のためにも、' shift' – Wen
を使用してみてください – Wen