Python/Pandas 사용 다른 행의 값에 두 개의 새로운 열 (A
및 B
)을 생성하여 데이터 프레임을 변환하려고합니다. 컬럼 ID3
), 동일한 그룹 내에서 (ID1
에 의해 결정됨). 각 그룹에 대해 ID1
Python Pandas : 데이터 프레임 그룹 내에서 다른 행의 값으로 새 열을 반복적으로 작성하십시오.
ID3
가
31
동일하다
ID2
값을 취하고
1
또는
2
되는
ID3
조건부
A
라는 새로운 항목이 값을 넣을. 마찬가지로
ID2
값을
ID3
이
41
과 같고이 값을
B
이라는 새 열에 넣고 다시
ID3
의 조건부를
1
또는
2
으로 설정합니다.
나는 다음과 같은 형식의 dataframe은 한 가정 :
import pandas as pd
df = pd.DataFrame({'ID1': (1, 1, 1, 1, 2, 2, 2), 'ID2': (151, 152, 153, 154, 261, 262, 263), 'ID3': (1, 2, 31, 41, 1, 2, 41), 'ID4': (2, 2, 1, 2, 1, 1, 2)})
print(df)
ID1 ID2 ID3 ID4
0 1 151 1 2
1 1 152 2 2
2 1 153 31 1
3 1 154 41 2
4 2 261 1 1
5 2 262 2 1
6 2 263 41 2
후 변환 형식은 다음과 같습니다 무엇처럼 보일 것입니다. A
및 B
열은 ID2
의 값으로 채워지고 여기서 조건부 값은 ID3
입니다.
ID1 ID2 ID3 ID4 A B
0 1 151 1 2 153 154
1 1 152 2 2 153 154
2 1 153 31 1
3 1 154 41 2
4 2 261 1 1
5 2 262 2 1 263
6 2 263 41 2 263
아래와 같은 내용을 사용하려고 시도했지만 변환시 원본 데이터 세트와 동일한 수의 값이 유지됩니다. 이것은 ID3
= 31
또는 41
인 행에는 문제가 있습니다. 또한 그룹 내에 31
의 값이없는 경우 ID2
값을 기본적으로 반환합니다.
df['A'] = df.groupby('ID1')['ID2'].transform(lambda x: x.loc[df['ID3'] == 31])
df['B'] = df.groupby('ID1')['ID2'].transform(lambda x: x.loc[df['ID3'] == 41])
결과 :
ID1 ID2 ID3 ID4 A B
0 1 151 1 2 153 154
1 1 152 2 2 153 154
2 1 153 31 1 153 154
3 1 154 41 2 153 154
4 2 261 1 1 261 263
5 2 262 2 1 262 263
6 2 263 41 2 263 263
어떤 제안이? 미리 감사드립니다.
인에
.where
로 필터링! 도움이되는 의견에 감사드립니다. 코드에서는 내 데이터 프레임을'ID1'에서 정렬 한 다음 백필에서 모든 값을 NaN으로 바꾸지 않기 위해 ID3를 정렬해야합니다. 많은 감사합니다! – Beskimo