gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:15:08 24 4
gpt4 key购买 nike

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

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 之前过滤然后 stack droplevel :
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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com