python - 在熊猫中使用 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=B1
是Col_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()
但是,我认为这不是最好的方法。任何帮助将不胜感激。
解决方案
mean
如果只有1
和0
值,则使用,因为定义mean
为sum / 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
推荐阅读
- c# - 在 WPF 中使用新 DataContext 刷新列表时如何防止 Expander listitem 折叠
- python - Google Cloud:自定义堆栈驱动程序指标
- android - 在 TextView 中显示文本并将其保存在缓存中?
- android - 我如何最后一次单击嵌套的 AlertDialog 作为主要按钮。setOnClickListener
- ios - Swift 中有 SVProgressHUD 或 KVNProgress 类的库吗?
- javascript - 使用 ajax 从网站中提取引用和作者
- windows-7 - 使用 Jet Brain 的 dotTrace 进行分析时,大约 85.5% 的本机代码?
- excel - 在excel中根据不同的if条件创建一个新列
- c++ - debian -bash: ./program: 无法执行二进制文件: exec 格式错误
- azure - Azure APIM 到 azure 函数相互身份验证