【问题标题】:pandas groupby multiple functionspandas groupby 多种功能
【发布时间】:2018-10-06 09:10:36
【问题描述】:

我想通过EMP_NAME 总结integer_transaction

  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 -*-

【问题讨论】:

    标签: python pandas group-by


    【解决方案1】:

    试试

     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
    

    【讨论】:

    • 有什么方法可以修改函数以使我不会收到警告?
    • 这是不可取的,因为代码会在未来的版本中中断。为什么不直接使用我的第一个解决方案?如果需要,您可以在之后重命名列。
    猜你喜欢
    • 2018-01-11
    • 2017-09-11
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    相关资源
    最近更新 更多