2016-10-24 17 views
2

목록 열이있는 팬더 데이터 프레임에서 각 그룹에 해당하는 목록을 연결하는 목적으로 간단한 groupby 작업을 수행하려고합니다. 단일 열에 그룹화 할 때 잘 작동하지만 두 열을 그룹화 할 때 실패 이유를 설명 할 수 없습니다. 단순화 된 예 : 나는 ab (즉 x.groupby(['a','b'])['c'].sum())에 그룹에 시도하는 경우 팬더는 여러 열을 그룹화 할 때 목록 열을 groupby와 연결합니다.

x.groupby('b')['c'].sum() 

b 
a [1, 2, 3, 4, 5, 6] 
b    [7, 8] 
dtype: object 

x.groupby('a')['c'].sum() 

a 
1 [1, 2, 3, 4] 
2 [5, 6, 7, 8] 
dtype: object 

, 그것은 변함없이 ValueError: Function does not reduce 실패

: 예상대로 중 하나 a 또는 b 작품에 그룹화 이제

x = pd.DataFrame({'a':[1,1,2,2],'b':['a','a','a','b'],'c':[[1,2],[3,4],[5,6],[7,8]]}) 

    a b  c 
0 1 a [1, 2] 
1 1 a [3, 4] 
2 2 a [5, 6] 
3 2 b [7, 8] 

, . 이 현상이 발생하는 이유는 볼 수없는 표면에

, 중 우리가 목록을 연결하는 방법,하지만 난 그게 팬더 내부 함께 할 수있는 뭔가가 상상 ...

대안 또는 설명 등?

+0

'c' 열이 숫자 열이라면 잘 작동하므로 목록과 함께 처리하지 않는'sum' 함수와 관련이 있다고 생각합니다. 때로는 옳은 일을하지만 몇 가지 이유로 그것이 두 번째라고 불리는 방식을 망칠 것입니다. – cd98

+0

아, 좋은 지적이야. 나는 그것을 확인 했어야했다. 어쨌든, 나는 @kabanus가 이것이 버그 일 가능성이 옳다고 생각한다. (우리가 파이썬 적이라면'sum'은 딸꾹질없이리스트를 처리해야한다.) – moustachio

+0

분명히 버그는 아니지만,'.sys (sum)'이'.sum()'은 목록에서''sum'' 함수를 어떻게 작동시키는지를 소스 코드에서 볼 수 있습니다. – cd98

답변

2

버그가있을 수 있습니다. 일부 행을 합산 할 수없는 경우 합계가 실패하는 경우가 있습니다. 예를 들어 마지막 두 행은 이중 그룹으로 분할 된 상태로 남아 있습니다. 해결 방법은 다음과 같습니다.

import pandas as pd 
x = pd.DataFrame({'a':[1,1,2,2],'b':['a','a','a','b'],'c':[[1,2],[3,4],[5,6],[7,8]]}) 
print x 
    a b  c 
0 1 a [1, 2] 
1 1 a [3, 4] 
2 2 a [5, 6] 
3 2 b [7, 8] 
print x.groupby(('a'))['c'].apply(sum) 
a 
1 [1, 2, 3, 4] 
2 [5, 6, 7, 8] 
Name: c, dtype: object 
print x.groupby(('a'))['c'].sum() 
a 
1 [1, 2, 3, 4] 
2 [5, 6, 7, 8] 
dtype: object 
print x.groupby(('a','b'))['c'].apply(sum) 
a b 
1 a [1, 2, 3, 4] 
2 a   [5, 6] 
    b   [7, 8] 
Name: c, dtype: object 

나는 이것을 팬더 팀에도 제출해야한다고 생각합니다.

관련 문제