이 문제의 동기는 레코드 중복 제거를하려는 것입니다. 일부 필드는 삭제할 수 있지만 다른 필드의 합계를 원합니다. 다음 dataframe를 들어 ,변환 전후의 Pandas groupby 인덱싱
In [48]: rand = np.random.RandomState(1)
df = pd.DataFrame({'A': ['foo', 'bar'] * 2 + ['baz', 'qux'],
'B': rand.randn(6),
'C': rand.randint(0, 20, 6),
})
In [49]: df.sort('A', inplace=1)
Out[49]: A B C
1 bar -0.611756 18
3 bar -1.072969 10
4 baz 0.865408 14
2 foo -0.528172 11
0 foo 1.624345 5
5 qux -2.301539 18
나도 같은 A
값으로 기록을 중복 제거하지만 (어떤 경우에는 아마 C
) B
의 합을 유지하고 싶습니다.
In [50]: df.groupby('A')[['B']].transform(sum)
Out[50]: B
1 -1.684725
3 -1.684725
4 0.865408
2 1.096174
0 1.096174
5 -2.301539
을하지만 어떤 이유로, 내가 마지막에 I 인덱스 때 내가 원하는 걸 포기하지 않는주의 : 나는 GROUPBY 년대 내가하고 싶은 일을해야 변환 생각
In [51]: df.groupby('A').transform(sum)[['B']]
Out[51]: B
1 -0.611756
3 -1.072969
4 0.865408
2 -0.528172
0 1.624345
5 -2.301539
왜 거기 차이? 내가 2 열을 변환 할 때 또한, 그것이 내가 무엇을 기대하지 않습니다
In [52]: df.groupby('A')[['B', 'C']].transform(sum) #same result as df.groupby('A').transform(sum)[['B', 'C']]
Out[52]: B C
1 -0.611756 18
3 -1.072969 10
4 0.865408 14
2 -0.528172 11
0 1.624345 5
5 -2.301539 18
내가이 상황에서 불일치를 신경 쓰지 않지만, 응용 프로그램에서 내가 일하고 있어요, 사실입니다 반대로,하지만 그것을 재현하는 예제를 찾을 수 없습니다 (즉, df.groupby('A').transform(sum)[['B', 'C']]
내가 원하는 것을 제공하지만 더 빠른 df.groupby('A')[['B', 'C']].transform(sum)
않습니다).
내 생각에 변환 대상의 차원과 관련이 있습니다. 첫 번째 예에서는 합계 할 하나의 열을 선택합니다. 두 번째 단계에서는 그룹 전체를 합산 한 다음 B 열을 선택합니다. 변환 메카닉은 다소 신비하며 동의합니다. – Zelazny7