2016-10-28 81 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

我已经解决了,谢谢。 我通过元素循环,然后加入相关的。 感谢您的回复。 –