다음과 같은 팬더 데이터 프레임이 있습니다.
id value
1 25
2 40
3 30
이상적으로 나는 이것을 다음과 같이 변환하고 싶습니다.
id value value_2 value_3
1 25 40 30
2 40 25 30
3 30 25 40
위 대화의 논리는 다른 ID의 값을 포함하는 2 개의 추가 열이 추가된다는 것입니다.
첫 번째 행 (id = 1)에서 value_2 = id = 2의 값이고 value_3 = id = 3의 값입니다.
두 번째 행 (id = 2)에서 value_2 = id = 1의 값, value_3 = id = 3의 값
세 번째 행 (id = 3)에서 value_2 = id = 1의 값, value_3 = id = 2의 값
각 행을 반복하고 값을 가져온 다음 다른 행 (한 번에 한 행)의 데이터 프레임을 업데이트하지 않고도 모든 행을 한 번에 업데이트 할 수있는 솔루션이 있습니까? 아니면 위의 도전에 대한 가장 쉬운 해결책은 무엇입니까?
IUUC, 다음을 수행 할 수 있습니다.
# create array (repeat of value)
repeats = np.tile(df['value'].values, (len(df), 1))
# remove elements from the diagonal
m = repeats.shape[0]
data = repeats[~np.eye(len(df), dtype=bool)].reshape(m, -1)
# create new DataFrame
df2 = pd.DataFrame(data=data[:, :], columns='value_' + df['id'].astype(str)[1:])
# concat old and new data
result = pd.concat([df, df2], axis=1)
print(result)
산출
id value value_2 value_3
0 1 25 40 30
1 2 40 25 30
2 3 30 25 40
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다