Группировать по фрейму данных со списком и суммой - PullRequest
0 голосов
/ 28 января 2020

У меня есть pandas Dataframe df , и я хочу сгруппировать по text столбцу с агрегацией:

  • Stack english_word и вернуть список
  • Суммировать столбец count

Теперь я могу сделать либо создание списка english_word, либо суммирование столбца count. Я пытаюсь сделать это, но он возвращает ошибку. Как сделать обе эти агрегации?

Проще говоря, что я хочу:

текст

saya есть курицу

english_word

[есть, курица]

считать

2

df.groupby('text', as_index=False).agg({'count' : lambda x: x.sum(), 'english_word' : lambda x: x.list()})

Это пример df :

df = pd.DataFrame({'text': ['Saya eat chicken', 'Saya eat chicken'], 
                   'english_word': ['eat', 'chicken'],
                   'count': [1,1]})

Ответы [ 2 ]

3 голосов
/ 28 января 2020

Вы почти там, вы можете сделать:

s = df.groupby('text').agg({'word': list, 'num': 'count'}).reset_index()

  text       word  num
0  bla  [i, love]    2

Пример данных

df = pd.DataFrame({'text':['bla','bla'],
                  'word':['i','love'],
                  'num':[1,2,]})
0 голосов
/ 28 января 2020

Как то так?

def summarise(df):
     return Series(dict(Count = df['count'].sum(), 
                        Words = "{%s}" % ', '.join(df['english_word'])))

new_df = df.groupby('text', as_index=False).agg({'count' : lambda x:x.sum(), 'english_word' : lambda x: x.list()})

new_df.groupby('text').apply(summarise)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...