年が範囲を上回るか下回る場合、データフレームに異なるフィルタを適用したいと思います。ここではデータフレームパンダ:年に基づいてデータフレームに異なるフィルタを適用する
dataset=pd.DataFrame({'ID': [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5],
'Avail' : [2017,2017,2017,2018,2018,2018,2017,2017,2017,2017,2017,2017,2017,2018,2018],
'Change' : [0,0,2018,0,0,0,0,0,0,0,0,0,2018,0,0],
'Pref' : [1,2,3,1,2,3,1,2,3,1,2,3,1,2,3],
'Status': ['null', 'null','Q','null','null','null','Q','null','null','null','null','null','Q','null','null']
},columns=['ID', 'Avail', 'Change', 'Pref', 'Status'])
ここではエラーを生成し、私が書いたコードがあるさ:
def yearfilt(x):
if x.loc[:, ['Avail', 'Change']].values.max(axis=1) < 2018:
if pd.isnull(x.Status):
x.drop_duplicates(subset=['STU_ID','Status' ], keep='last')
else:
x=x.drop(x[pd.isnull(x.Status)].index)
else:
if pd.isnull(x.ASSESSMENT_OUTCOME_CD):
x.drop_duplicates(subset=['STU_ID','Status' ], keep='first')
else:
x=x.drop(x[pd.isnull(x.Status)].index)
df=dataset.groupby(['ID']).apply(yearfilt).sort_values(["ID"]).reset_index(drop=True)
エラーは、私が実行したいと思い何
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
です:
If the max (Avail, Change) < 2018 then
Case 1: the same status --> drop duplicates and keep the last
Case 2: different status --> drop null-value statuses
else (in other words max (Avail, Change) = 2018)
Case 1: the same status --> drop duplicates and keep the first
Case 2: different status --> drop null-value statuses
出力は次のようになります:
ID Year Change Pref Status
1 2017 2018 3 Q
2 2018 0 1 null
3 2017 0 1 Q
4 2017 0 3 null
5 2017 2018 1 Q
基本的に、各IDから1つだけを保持したいと思います。 ありがとう
問題を起こしている行を書き留めてください。 –
コードの最後の行:df = dataset.groupby(['ID'])。apply(yearfilt).sort_values(["ID"])。reset_index(drop = True) – Omido