7
특정 열 (key1, key2)에 두 개의 데이터 프레임을 병합하고 다른 열 (값)의 값을 합산합니다. SQL의 측면에서팬더에서 두 개의 데이터 프레임을 병합합니다. 일부 열에서 조인하고 다른 테이블을 합산합니다.
key1 key2 value
0 0 0 0
1 1 1 1
2 2 2 12
3 3 3 14
4 4 4 12
5 5 5 13
가, 내가 원하는 :
방법 1
concatenated = pd.concat([df1, df2])
grouped = concatenated.groupby(['key1', 'key2'], as_index=False)
summed = grouped.agg(np.sum)
result = summed[['key1', 'key2', 'value']]
,536,913 :
SELECT df1.key1, df1.key2, df1.value + df2.value AS value
FROM df1 OUTER JOIN df2 ON key1, key2
나는 두 가지 방법을 시도
>>> df1 = pd.DataFrame({'key1': range(4), 'key2': range(4), 'value': range(4)})
key1 key2 value
0 0 0 0
1 1 1 1
2 2 2 2
3 3 3 3
>>> df2 = pd.DataFrame({'key1': range(2, 6), 'key2': range(2, 6), 'noise': range(2, 6), 'value': range(10, 14)})
key1 key2 noise value
0 2 2 2 10
1 3 3 3 11
2 4 4 4 12
3 5 5 5 13
나는이 결과를 원하는 63,210
접근이
joined = pd.merge(df1, df2, how='outer', on=['key1', 'key2'], suffixes=['_1', '_2'])
joined = joined.fillna(0.0)
joined['value'] = joined['value_1'] + joined['value_2']
result = joined[['key1', 'key2', 'value']]
두 가지 접근법은 내가 원하는 결과를 제공하지만, 간단한 방법이 있는지 궁금하다.
병합 시간 집계와 같이 좀 더 간결한 방식 인 것처럼 보입니다. –
나는 모든 것을 최적화 된 마법의 기능을 찾고있었습니다. – Laurie
나는 접근 방식 2를 선택했고, 가능한 한 많이 연쇄 작도를 수행했다. 왜냐하면이 방식이 더 빠르기 때문이다. – Laurie