Панды групповые несколько функций - PullRequest
0 голосов
/ 25 апреля 2018

Я хочу суммировать integer_transaction на EMP_NAME.

  1. почему моя первая команда не работает?Как изменить его
  2. в случае второй команды, как избежать предупреждения?
  3. Есть ли способ поместить EMP_NAME в столбец вместо индекса

Я хочу вывод

Emp_name Count Sum
a           2   1
b           1   0


import pandas as pd
import numpy as np
df = pd.DataFrame(data = {'EMP_NAME': ["a", "a", "b"], 'integer_transaction': [0, 1, 0]})

x=df.groupby(['EMP_NAME'])['integer_transaction'].agg({'Frequency_count': count, 'Frequency_Sum': np.sum})

x=df.groupby(['EMP_NAME'])['integer_transaction'].agg({'Frequency_count': np.size, 'Frequency_Sum': np.sum})

FutureWarning: using a dict on a Series for aggregation
is deprecated and will be removed in a future version
  # -*- coding: utf-8 -*-

1 Ответ

0 голосов
/ 25 апреля 2018

Попробуйте

 df.groupby(['EMP_NAME'])['integer_transaction'].agg(["count", "sum"])

          count  sum
EMP_NAME            
a             2    1
b             1    0

Если вы действительно хотите, вы можете переименовать столбцы с помощью дополнительного .rename("count": "Frequency_count", "sum": "Frequency_sum").

Просто для справки, следующее также прекрасно работает:

x=df.groupby(['EMP_NAME'])['integer_transaction'].agg({'Frequency_count': "count", 'Frequency_Sum': np.sum})
x
__main__:1: FutureWarning: using a dict on a Series for aggregation
is deprecated and will be removed in a future version
Out[26]: 
          Frequency_count  Frequency_Sum
EMP_NAME                                
a                       2              1
b                       1              0

Обратите внимание, как цитируется count.

x=df.groupby(['EMP_NAME'])['integer_transaction'].agg({'Frequency_count': np.size, 'Frequency_Sum': np.sum})
x
__main__:1: FutureWarning: using a dict on a Series for aggregation
is deprecated and will be removed in a future version
Out[27]: 
          Frequency_count  Frequency_Sum
EMP_NAME                                
a                       2              1
b                       1              0

Полученные предупреждения просто говорят о том, что эта функция будет удалена в будущем, поэтому их, вероятно, не следует использовать.Тем не менее, они дают правильный ответ.

Чтобы переместить индекс в столбец, попробуйте

df.groupby(['EMP_NAME'])['integer_transaction'].agg(["count", "sum"]).reset_index()
  EMP_NAME  count  sum
0        a      2    1
1        b      1    0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...