pandas - groupby pandas 在特定条件下求均值和总和

标签 pandas dataframe group-by

我正在尝试为包含数百列的非常大的数据框生成汇总统计信息,并总结它们与感兴趣的“结果”的关系。可以使用下面的代码生成一个简化的数据框:

df1 = pd.DataFrame({"time1": [0, 1, 1, 0, 0],
                    "time2": [1, 0, 0, 0, 1],
                    "time3": [0, 0, 0, 1, 0],
                    "outcome": [1, 0, 0, 1, 0]})

我想要做的是确定每一列与结果特征的比例和总和关系。

目前,我一次执行几列操作,如下所示:

df1 = df1.groupby("outcome")[["time1", "time2", "time3"]].agg(["mean", "sum"]).reset_index()
      
df1[df1["outcome"] == 1].T

这会导致相当困惑的数据框,如下所示:

                1
outcome       1.0
time1   mean  0.0
        sum   0.0
time2   mean  0.5
        sum   1.0
time3   mean  0.5
        sum   1.0

如何改进此输出以显示每列的各个列的平均值和总和?类似于下面所示的输出。

       mean  sum
time1     0    0
time2   0.5    1
time3   0.5    1

理想情况下,我想对数据框中的数百列执行此操作,并评估它们与结果的关系。

那么有人可以指导我找到一个解决方案,允许我对数百列执行此操作(无需单独键入它们的名称就是解决方案),并在干净的数据框中得到结果,如上面的示例输出所示?非常感谢!

最佳答案

正如@sammywemmy所述,我们可以 unstack计算值后。我们还可以使用loc而不是reset_index从索引中选择 outcome==1:

df1 = (
    df1.groupby("outcome")
        .agg(["mean", "sum"])  # Perform Aggregations
        .loc[1]  # Select outcome==1 from index
        .unstack()  # convert index to columns
)

我们还可以在groupby agg之前过滤然后stackdroplevel :

df1 = (
    df1[df1["outcome"] == 1]  # Filter DataFrame
        .groupby("outcome")  # Groupby
        .agg(["mean", "sum"])  # Perform Aggregations
        .stack(0)  # Convert columns to rows
        .droplevel(0)  # Drop outcome==1
)

或者set_index + stack先然后groupby agg在索引上:

df1 = (
    df1.set_index('outcome').stack()  # Convert time columns to rows
        .groupby(level=[0, 1])  # Groupby
        .agg(['mean', 'sum'])  # Perform Aggregations
        .loc[1]  # Select outcome==1 from index
)

或者使用 pivot_table和多个聚合函数:

df1 = (
    df1.pivot_table(index='outcome', aggfunc=['mean', 'sum'])
        .loc[1]  # Select outcome==1 from index
        .unstack(0)  # convert inner index to columns
)

所有产品:

       mean  sum
time1   0.0  0.0
time2   0.5  1.0
time3   0.5  1.0

关于pandas - groupby pandas 在特定条件下求均值和总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68810555/

相关文章:

mysql - 聚合函数需要GROUP BY吗?

python - Pandas - 替换、 float 和列的总和

python - 不规则分箱 p2 python pandas

python - 打印 2 个 pandas 列的格式

带有过滤器用法的python itertools groupby

sql - 在 MySQL 中按月和年分组

python - 拆分多列

python - 如何绘制以时间序列为行的 Pandas 数据框?

python - 如何加入/合并数据集?

python - Pandas 函数耗时太长