2016-01-13 2 views
2

У меня есть данные кадр, какРаботают на панд GroupBy объекта в цикле

df = pd.DataFrame({'A': ['foo', 'bar','cat'] * 3, 
      'B': ['i','who','he','am','are','said','satya','you','hello'], 
      'C': [5, 2, 3, 4, 6, 9,12,23,45]}) 
df 
Out[47]: 
A  B C 
0 foo  i 5 
1 bar who 2 
2 cat  he 3 
3 foo  am 4 
4 bar are 6 
5 cat said 9 
6 foo satya 12 
7 bar you 23 
8 cat hello 45 

Я группируя их, как показано ниже:

g = df.groupby('A') 
for name, group in g: 
    print(name) 
    print(group) 

получая о/р, как:

bar 
    A B C 
1 bar who 2 
4 bar are 6 
7 bar you 23 
cat 
    A  B C 
2 cat  he 3 
5 cat said 9 
8 cat hello 45 
foo 
    A  B C 
0 foo  i 5 
3 foo  am 4 
6 foo satya 12 

Так что мне нужно сделать, это то, что я хочу перебирать каждую группу и снова для каждой группы. Я буду перебирать (не знаю) по столбцам и конкатцировать значения a т столбец B, так что я могу получить что-то вроде

bar = who are you 
cat = he said hello 
foo = i am satya 

Я не могу сделать agg функцию на этом. Может ли кто-нибудь предложить, как это сделать?

ответ

3

IIUC вы можете groupby на A, а затем apply лямбда к join строковые значения:

In [185]: 
df.groupby('A')['B'].apply(' '.join) 

Out[185]: 
A 
bar  who are you 
cat he said hello 
foo  i am satya 
Name: B, dtype: object 
+0

@ EdChum-большой help..problem solved..Btw может я спросить кое-что на этом отношении, которые я не упомянутый в вопросе ... – Satya

+0

Никто не может помешать вам спросить, мы можем выбрать только ответ: – EdChum

+0

На самом деле у меня есть несколько имен файлов вместо строк в столбце B. Поэтому, если я хочу читать каждый файл csv для каждой группы и добавьте их. Как я могу добиться этого .. нужна ваша помощь! – Satya

Смежные вопросы