nickwarters :
사과 용어가 잘못된 경우.
내 Dataframe 4 열이 있습니다. COL1은 (동일한 값의 배수를 유지한다) Col2의 열 3은 부울 Col4 부울이다 이벤트 타입 인 것이다 personId
만 COL3 또는 col4은 한 번에 사실 수 있습니다.
입력:
personId EventType Col3 Col4
1 A True False
2 A True False
3 A True False
2 B False True
4 A True False
3 B False True
원하는 출력 :
personId EventType Col3 Col4 Col5
1 A True False False
2 A True False True
3 A True False True
2 B False True False
4 A True False False
3 B False True False
4 C False True False
당신이 볼 수 있듯이 열 3에서 Trues는 C를 또한 이벤트 유형 B를 가지고있는 personId 관련이 있지만, 여기서 COL5에 해당 할 것
나는 완전히 붙어입니다. 나는 매우 간단 뭔가를 내려다입니다 확신합니다.
나는 다음을 시도했다 :
df = pd.merge(df, left_on='personId', right_on='personId')
df = pd.merge(df, df[['personId','Col4']], on='personId', how='left)
그러나 어느 쪽도 바람직한 결과를 얻을 수 없다.
스콧 보스턴 :
더 나은 논리 :
df['Col5'] = df.groupby('personId')['EventType'].transform(lambda x: (x=='B').any()) & df['Col3']
산출:
personId EventType Col3 Col4 Col5
0 1 A True False False
1 2 A True False True
2 3 A True False True
3 2 B False True False
4 4 A True False False
5 3 B False True False
세부 : 사용 GROUPBY personid 및 transform
True로 이벤트 유형 열이 personid에있는 모든 이벤트는 다음 부울 논리 연산자와 사용, 'B'에 동일한 경우 &
'COL3'와 함께합니다.
IIUC, 당신은 GROUPBY 일부 부울 논리를 사용해보십시오 :
df.join(df.groupby('personId', group_keys=False)
.apply(lambda x: (x['EventType']=='B').any() & x['Col3'])
.rename('Col5'))
산출:
personId EventType Col3 Col4 Col5
0 1 A True False False
1 2 A True False True
2 3 A True False True
3 2 B False True False
4 4 A True False False
5 3 B False True False