2014-05-21 18 views
8

리스트에 가입, 내가 하나의 열을 GROUPBY 및 목록을 가입하려는이 같은 그룹에 속하는 예 : 공정 후팬더 두 개의 열이, GROUPBY와 나는 dataframe 안양이

column_a, column_b 
1,   [1,2,3] 
1,   [2,5] 
2,   [5,6] 

:

column_a, column_b 
1,   [1,2,3,2,5] 
2,   [5,6] 

나는 모든 중복을 유지하려면. 다음 질문이 있습니다.

  • 데이터 프레임의 dtypes는 개체입니다. convert_objects()는 column_b를 자동으로 목록으로 변환하지 않습니다. 어떻게해야합니까? .
  • df.groupby (...)의 기능을 수행하는 작업
  • 적용 (람다 X : ...)에 적용? x의 형태는 무엇입니까? 명부?
  • 내 주요 문제에 대한 해결책?

미리 감사드립니다.

답변

18

object DTYPE은 기본적으로, 플로트, 부울, 날짜, 또는 timedelta을 int로하지 의미 포괄 DTYPE입니다. 그래서 그것을 목록으로 저장하고 있습니다. convert_objects 열을 해당 dtyp 중 하나로 변환하려고합니다.

당신은

In [63]: df 
Out[63]: 
    a   b c 
0 1 [1, 2, 3] foo 
1 1  [2, 5] bar 
2 2  [5, 6] baz 


In [64]: df.groupby('a').agg({'b': 'sum', 'c': lambda x: ' '.join(x)}) 
Out[64]: 
     c    b 
a       
1 foo bar [1, 2, 3, 2, 5] 
2  baz   [5, 6] 

이 그룹 열 a의 값으로 데이터 프레임을합니다. [groupby]. (http://pandas.pydata.org/pandas-docs/stable/groupby.html)에 대해 자세히 알아보십시오.

그냥 [1, 2, 3] + [2, 5]

+0

덕분에, 나는 또 다른 질문이 있습니다 : 내가 문자열 유형 인 세 번째 열이 있고, 나는 열을 하나의 그룹에 의해 그들 .join ''하십시오. 어떻게해야합니까? –

+0

문자열은 문자 목록과 같습니다. 그래서'.sum()'도 거기에서 작동해야합니다. – TomAugspurger

+0

네,하지만 각 연결 문자열 사이에 공백을 넣고 싶습니다. –

4
df.groupby('column_a').agg(sum) 

이 때문에 운영자가 sum 과부하의 작동과 같은 일반 목록을 sum (연결)을하고있는 것은 함께 목록을 연결합니다. 결과 DF의 인덱스는 column_a에서 값이 될 것입니다 :