2016-10-28 80 views
1

我有一個源數據框,需要循環所有評論的值,這些評論的值是在相應的名稱字段中存在的值,並且結果需要作爲DF中的新列添加。這也可以成爲一個新的DataFrame。Dataframe元素訪問

輸入數據:

 Name   Comments 
0  N-1    Good 
1  N-2    bad 
2  N-3    ugly 
3  N-1   very very good 
4  N-3   what is this 
5  N-4   pathetic 
6  N-1   needs improvement 
7  N-2   this is not right 
8  Ano-5  It is average 

[8 rows x 2 columns] 

例如 - 對於評論的所有值名稱N-1,運行一個循環,並沿着與這些2個值添加的輸出作爲新的列(名稱,註釋) 。

我試圖做到以下幾點,並能夠根據名稱進行分組。但我無法通過評論的所有值運行爲他們追加輸出:

gp = CommentsData.groupby(['Document']) 

for g in gp.groups.items(): 
    Data1 = CommentsData.loc[g[1]] 
    #print(Data1) 

數據在集團通過循環就這樣產生:

Name  Comments 
0 N-1   good 
3 N-1  very very good 
6 N-1  needs improvement 


1 N-2   bad 
7 N-2  this is not right 

我無法訪問第2列中的值。 使用df.iloc[i] - 我只能訪問第一個元素。但並非全部(因爲不同名稱的元素數量會有所不同)。

現在,我想使用Comment中的值,然後將輸出添加爲數據框中的附加列(可以是新的DF)。

預期輸出:

 Name   Comments    Result 
0  N-1    Good     A 
1  N-2    bad     B 
2  N-3    ugly     C 
3  N-1   very very good    A 
4  N-3   what is this    B 
5  N-4   pathetic     C 
6  N-1   needs improvement   C 
7  N-2   this is not right   B 
8  Ano-5   It is average    B 

[8 rows x 3 columns] 
+0

你正在尋找應用'()'? – Jan

+0

@Jan - 謝謝。 是的,我正在尋找這樣的東西。 當我試圖應用(): '數據2 = Data1.apply(STR,軸= 1)'' 打印(DATA2)' 我正在怪異輸出以下面的格式: '2名稱無-1 \ n評論...' '16名稱N-1 \ n評論...' –

+0

檢查樞軸,在這個答案:http://stackoverflow.com/questions/22798934/pandas-long-to-wide-reshape #35087831 - 你只想製作一張長桌子。 – kabanus

回答

0

可以使用applyreset_index

df.groupby('Name').Comments.apply(pd.DataFrame.reset_index, drop=True).unstack() 

enter image description here

+0

我所取得的數據如下: '[array([u'N-1'],dtype = object),u'Good','A',array([u'N-2 '],dtype = object),u'Bad','B'] 因此,1行數據被分成3個元素(N-1,Good,A),然後又一行使得難以分開行-1行數據(N-2,bad,B)。 我現在堅持如何一次讀取3個元素並使用它們。 –

+0

我已經解決了,謝謝。 我通過元素循環,然後加入相關的。 感謝您的回覆。 –