Как я могу получить третий столбец с количеством строк после функции groupby в Pandas? - PullRequest
0 голосов
/ 07 мая 2020

Я изучаю pandas и у меня есть вопрос об агрегатных функциях. Приносим свои извинения за очень простой c вопрос для экспертов на этом форуме :).

Вот образец моего набора данных:

     EmpID   Age_Range   Salary

0   321          20, 35   34000


1   561         20, 35    24000


2   789         50, 65     34000

вышеупомянутый набор данных - df, и я экономлю среднее значение. Информация о зарплате для возрастного диапазона сотрудников в отдельном фрейме данных (df_age), где я сохраняю приведенные выше данные. Мне удалось успешно применить mean () к таблице заработной платы, чтобы получить среднее значение. зарплата по возрастному диапазону.

Итак, в основном то, что я хочу, - это количество сотрудников для каждого age_range. df_age['EmpCount'] = df.groupby('Age_Range')['EmpID'].count() не работает и возвращает «NaN» в моем наборе данных.

дополнительно, когда я использовал функцию преобразования

df_age['EmpCount'] = df.groupby('Age_Range')['EmpID'].transform(count)

, она возвращает значения, но то же значение три возрастных диапазона - 37 лет, что неверно. Всего в моем наборе данных 100 записей.

желаемый результат для df_age:

0 (20, 35]  50000  27
1 (35, 50]  37000  11 
2 (50, 65]  65000  30

Спасибо!

Ответы [ 3 ]

0 голосов
/ 07 мая 2020

Вы можете использовать size или len в преобразовании, как и с count:

# Dummy data
df = pd.DataFrame({"sample": ["sample1", "sample2", "sample2", "sample3", "sample3", "sample3"]})

df["number_of_samples"] = df.groupby("sample").sample.transform("size")
df["number_of_samples_again"] = df.groupby("sample").sample.transform(len)

Вывод:

    sample  number_of_samples  number_of_samples_again
0  sample1                  1                        1
1  sample2                  2                        2
2  sample2                  2                        2
3  sample3                  3                        3
4  sample3                  3                        3
5  sample3                  3                        3
0 голосов
/ 07 мая 2020
• 1000 три фрейма данных - я, очевидно, проигнорирую df_age1 и 2, но я все еще ищу эффективный ответ!
0 голосов
/ 07 мая 2020

Если я правильно понял ваш вопрос, вам нужен новый столбец с количеством сотрудников для age_range. Что ж, вы можете использовать агрегатную функцию, чтобы получить следующий ответ:

df_age = df.set_index(['Age_Range','EmpID']).groupby(level =0).size().reset_index(name='count_of_employees') 
df_age['Ave_Salary'] = df.set_index(['Age_Range','Salary']).groupby(level =0).mean()
...