2015-10-19 48 views
2

我遇到以下問題:我有一個分組對象。對於每個分組對象,我希望以該分組的特定列中包含的所有值的逗號分隔列表。我的代碼如下:如何輸出分組對象中指定列中的所有值的列表

for key, group in df.groupby('Column1'): 
    All_values_in_group = [] 
    for item, frame in group['Column2'].iteritems(): 
     list = frame.split(',') 
     for value in list: 
      All_values_in_group.append(value) 
      print key 
      print All_values_in_group 

這背後的想法是,我組由特定的列我的數據,並創建一個空列表。然後,對於每個frame(行),我通過拆分行','中包含的string列出一個列表。然後將此列表中的每個值附加到我所需的output_list All_values_in_group。這個列表應該是列2中包含的每一行X組中的所有數據的「概要」。

我現在的問題是我沒有得到一個列表,但是當我列出幾個列表時,我就是這樣(L1是組密鑰):

L1 
['string1] 
L1 
['string1, 'string2'] 
L1 
['string1', 'string2', 'string3'] 

我只想要一個列表包含All_values_in_group所有值從列2該組中,在本例中的最後一行很像,我想保留副本。

使其更清晰,這裏是我的數據的一個例子:

Column1 Column2 
0  L1 string1,string2,string3 
1  L1 string1 
2  L1 string2,string3 
3  L2 stringA,stringB 

我要的是:

L1 
All_values_in_group ['string1', 'string2', 'string3', 'string1', 'string2', 'string3'] 
L2 
All_values_in_group ['stringA', 'stringB'] 

有誰知道一種方法,使我的代碼工作也是這樣嗎?我感覺這只是一些小事,但我不會想到它。提前致謝!

回答

2

您可以在「列1」和apply調用join來連接所有的字符串值,然後,如果你希望從結果構建一個列表對象拉姆達GROUPBY:

In [22]: 
df.groupby('Column1')['Column2'].apply(lambda x: [','.join(x)]) 

Out[22]: 
Column1 
L1 [string1,string2,string3,string1,string2,string3] 
L2         [stringA,stringB] 
Name: Column2, dtype: object 
+0

這是一個非常整潔的方式做它,謝謝! –

+0

等待,實際上它並不完美。列表中的每個最後一個和第一個字符串都不是以逗號分隔的,而是作爲一個字符串連接在一起的......我如何糾正這個問題? –

+1

已更新爲修復錯誤 – EdChum

相關問題