2014-05-21 114 views
8

我有一個數據幀DF,有兩列,我想GROUPBY一列,並加入列表屬於同一組,例如:大熊貓GROUPBY和連接列出

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] 

我想保留所有重複項。我有以下問題:

  • dataframe的dtypes是對象。 convert_objects()不會自動將column_b轉換爲列表。我怎樣才能做到這一點?
  • df.groupby(...)。apply(lambda x:...)中的函數應用於? x的形式是什麼?清單?
  • 解決我的主要問題?

在此先感謝。

回答

18

object dtype是一個全面的dtype,基本上不是int,float,bool,datetime或timedelta。所以它將它們存儲爲一個列表。 convert_objects嘗試將列轉換爲其中一種dtype。

你想

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)。

這是做常規列表sum(串聯)就像[1, 2, 3] + [2, 5]

+0

謝謝,我還有一個問題:如果我有第三列是字符串類型,並且我想按列的組加上它們。我該怎麼辦? –

+0

字符串就像字符列表。所以'.sum()'也應該在那裏工作。 – TomAugspurger

+0

是的,但我想在每個連接的字符串之間有一個''(空格)。 –

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

這工作,因爲操作符重載sum的串接名單在一起。由此產生的df的索引值將是column_a的值: