2016-10-28 4 views
1

У меня есть исходный dataframe, который необходимо перебирать для всех значений комментариев, которые сгруппированы по значениям, содержащимся в соответствующем поле Name, и результат должен быть добавлен в качестве нового столбца в 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] - Я могу получить доступ только к первому элементу. Но не все (поскольку количество элементов будет варьироваться для разных значений имен).

Теперь я хочу использовать значения в комментарии, а затем добавить вывод в качестве дополнительного столбца в dataframe (может быть новый 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 - Спасибо. Да, я искал что-то вроде этого. Когда я попытался применить(): 'Data2 = Data1.apply (улица, ось = 1)' ' печать (Data2)' Я получаю странный результат в следующем формате: '2 Название N -1 \ nКомментарии ... ' ' 16 Имя N-1 \ nКомментарии ... ' –

+0

Проверить ответ в этом ответе: http://stackoverflow.com/questions/22798934/pandas-long-to-wide-reshape # 35087831 - Вы просто хотите сделать длинный стол широким. – kabanus

ответ

0

вы можете использовать apply и reset_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, Хорошо, A), а затем следующая строка, из-за которой сложно отделить строку -1 из данных строки-2 (N-2, плохое, B). Я сейчас застрял, как читать 3 элемента за раз и использовать их. –

+0

Я, я решил это спасибо. Я зациклился на элементах и ​​присоединился к связанным. Спасибо за ваши ответы. –