python - Groupby 在 Python 中的多个条件下对多列进行求和和计数

标签 python pandas numpy

我有一个看起来像这样的 Pandas 数据框:

import pandas as pd
import numpy as np
data = {
    "Type": ["A", "A", "B", "B", "B"],
    "Project": ["X123", "X123", "X21", "L31", "L31"],
    "Number": [100, 300, 100, 200, 500],
    "Status": ['Y', 'Y', 'N', 'Y', 'N']
}
df = pd.DataFrame.from_dict(data)

我想按 Type 分组,并根据几个条件进行计数和求和,得到如下结果:

Type  Total_Count  Total_Number  Count_Status=Y  Number_Status=Y  Count_Status=N  Number_Status=N 
 A        2          400              2               400              0               0
 B        5          800              1               200              2              600

我试过以下但不完全是我需要的。请分享您可能有的任何想法。谢谢!

df1 = pd.pivot_table(df, index = 'Type', values = 'Number', aggfunc = np.sum)
df2 = pd.pivot_table(df, index = 'Type', values = 'Project', aggfunc = 'count')
pd.concat([df1, df2], axis=1)

最佳答案

如果你想创建一个函数:

def my_agg(x):
    names = {
        'Total_Count': x['Type'].count(),
        'Total_Number': x['Number'].sum(),
        'Count_Status=Y': x[x['Status']=='Y']['Type'].count(),
        'Number_Status=Y': x[x['Status']=='Y']['Number'].sum(),
        'Count_Status=N': x[x['Status']=='N']['Type'].count(),
        'Number_Status=N': x[x['Status']=='N']['Number'].sum()}

    return pd.Series(names)

df.groupby('Type').apply(my_agg)

    Total_Count   Total_Number  Count_Status=Y  Number_Status=Y Count_Status=N  Number_Status=N
Type                        
A      2           400                2                400            0             0
B      3           800                1                200            2            600

关于python - Groupby 在 Python 中的多个条件下对多列进行求和和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53908735/

相关文章:

python - Pandas 对多列进行排序

python - 欧元金额的正则表达式

python - 连接两个网格及其结果数组的 numpy 方法

python - 计算特定 row_pandas 之前和之后的行之间的差异

python - 使用 Python 检查电子邮件的大小限制

Python:按字段拆分对象列表的更好方法?

Python 套接字 : how to only receive one message at a time

python - 在 Python 中创建整数范围列表的最有效且可读的方法是什么?

python - 为什么 Pandas 数据帧 to_dict ("records") 与另一个简单的实现相比性能很差?

python - 在二维中扩展 numpy 数组的最简单方法是什么?