중첩 된 파이썬 팬더 Dataframe를 사용하여 조인

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 및 transformTrue로 이벤트 유형 열이 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

추천

출처http://43.154.161.224:23101/article/api/json?id=21494&siteId=1