Python — Pandas groupby agg

#python #pandas #dataframe #pandas-groupby

#python #панды #фрейм данных #pandas-groupby

Вопрос:

У меня есть простой dataframe (df), как показано ниже:

 index Job  Person 
1     j1   Cathy
2     j2   Mark
3     j3   Cathy
4     j4   Steve
5     j5   Cathy
 

Я хотел бы преобразовать приведенное выше dataframe как:

 Person CountJob  JobDetails
Cathy     3      j1;j3;j5
Mark      1      j2
Steve     1      j4
 

Я могу частично решить эту проблему, используя groupby :

 final = df.groupby('Person').agg(
        CountJob=pd.NamedAgg(column='Job',aggfunc="count"),
        )
 

Я изо всех сил пытаюсь получить формат для последнего столбца « JobDetails . Я предполагаю, что могу использовать эту lambda функцию, но я просто не знаю как!

Ответ №1:

Попробуйте:

 df.groupby('Person').agg(CountJob=('Job','count'),
                         JobDetails=('Job',';'.join)
                        )
 

Комментарии:

1. как обрабатывать «нулевые значения» в . присоединиться к разделу?

2. Сделайте удаление перед присоединением

3. Я продолжал получать ошибку при использовании ‘dropna ()’. Возможно, мой синтаксис был неправильным. В итоге я преобразовал весь df в str. df = df.astype(str), а затем запустил groupby.. какой синтаксис для dropna..

4. @CodeMaster попробуйте ('Job', lambda x: ';'.join(x.dropna()) . Или df.dropna('Job').groupby(...)