首页 > 解决方案 > 在熊猫中使用 groupby 获得比例的更有效方法

问题描述

我有以下熊猫数据框:

import pandas as pd

i1 = ["AA", "AA", "AA", "BB", "BB", "BB"]
i2 = ["B1", "B1", "B1", "A1", "A1", "A1"]
col1 = [1, 1, 1, 0, 1, 0]
col2 = [0, 0, 0, 1, 1, 0]
col3 = [1, 1, 0, 0, 0, 0]

df = pd.DataFrame({"I1": i1,
                  "I2": i2,
                  "Col_1":col1,
                  "Col_2":col2,
                  "Col_3":col3})

我想做的是获得每列的每个 i1 和 i2 的 1s(一个)的比例。例如 和 的值I1=AA应该I2=B1Col_1=1,Col_2=0, Col_3=0.66

我正在使用以下代码获得所需的输出:

df.groupby(["I1", "I2"])[["Col_1", "Col_2", "Col_3"]].sum()/df.groupby(["I1", "I2"])[["Col_1", "Col_2", "Col_3"]].count()

但是,我认为这不是最好的方法。任何帮助将不胜感激。

标签: pythonpandas

解决方案


mean如果只有10值,则使用,因为定义meansum / count

#mean of all numeric columns (without I1, I2)
df1 = df.groupby(["I1", "I2"]).mean()
#if need specify columns names
#df1 = df.groupby(["I1", "I2"])["Col_1", "Col_2", "Col_3"].mean()
print (df1)
          Col_1     Col_2     Col_3
I1 I2                              
AA B1  1.000000  0.000000  0.666667
BB A1  0.333333  0.666667  0.000000

推荐阅读