python - 如何在单个列上使用 groupby 并在 Pandas 中对多个列进行比较?

标签 python pandas lambda apply pandas-groupby

我有一个用户数据框,他们是否注册,以及模型对他们是否注册的预测。我想找到每个用户:TP(他们注册了,模型预测他们注册了),FP(他们没有注册,但模型预测他们注册了),FN(他们注册了,但模型预测没有),以及TN(他们没有注册,模型预测没有)。这里 1 表示他们注册了,0 表示他们没有注册。我想对用户进行分组,然后使用其他两列进行比较。例如,我可能有如下内容:

Users    |    Signed_up    |     Prediction   |
User1         1                  0            
User2         0                  0
User1         1                  1
User3         1                  1
User2         0                  1
User2         0                  0
...

For TP, the resulting table might look something like:

Users    |    TP    |
User1         1
User2         0
User3         1

For TN, the resulting table might look something like:
Users    |    TN    |
User1         0
User2         1
User3         0

and so on for FP and FN.

我假设我在 Users 列上分组并使用 lambda 函数比较 Sign_upPrediction 列,但我不是确定如何实际执行此操作。如果有任何帮助,我将不胜感激!

最佳答案

groupby 之前进行比较,然后是 groupby + sum

(df.assign(TP = df.Signed_up & df.Prediction, 
           TN = (df.Signed_up == 0) & (df.Prediction == 0),
           FN = df.Signed_up & (df.Prediction == 0), 
           FP = (df.Signed_up == 0) & df.Prediction)
   .groupby('Users')['TP', 'TN', 'FN', 'FP'].sum())

       TP   TN   FN   FP
Users                   
User1   1  0.0  1.0  0.0
User2   0  2.0  0.0  1.0
User3   1  0.0  0.0  0.0

受@BrianJoseph 的启发,只需更少的输入,您就可以groupby 所有 3 列,确定大小,并取消堆叠除用户之外的所有内容:

df.groupby([*df]).size().unstack([1,2]).fillna(0)

Signed_up     1         0     
Prediction    0    1    0    1
Users                         
User1       1.0  1.0  0.0  0.0
User2       0.0  0.0  2.0  1.0
User3       0.0  1.0  0.0  0.0

关于python - 如何在单个列上使用 groupby 并在 Pandas 中对多个列进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53710881/

相关文章:

java - 不存在类型变量 U 的实例,因此 Foo 符合 CompletionStage<U>

haskell - 无法正确理解 Haskell 中的 lambda

python - 如何在 SQLAlchemy 查询中使用 sum 和 order by

python - 如何为具有不同列的多个表编写单个查询,从而使用 python-django 创建rest api

python - 如何使用字典从 Pandas DataFrame 列中获取值

python - Pandas 在 bool 索引匹配周围获取 N 行

python - 在文件夹中的多个文件上运行数据解析器? Python

python - Pandas 过滤并应用

python - 按 timedelta 修剪 TimeSeries

C# 新手 : how to know the meaning of a variable in a lambda expression