我有一个用户数据框,他们是否注册,以及模型对他们是否注册的预测。我想找到每个用户: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_up
和 Prediction
列,但我不是确定如何实际执行此操作。如果有任何帮助,我将不胜感激!
最佳答案
在 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/