【问题标题】:pandas groupby and update the sum of the number of times the values in one column is greater than the other columnpandas groupby并更新一列中的值大于另一列的次数的总和
【发布时间】:2018-03-09 06:56:28
【问题描述】:

我有一个如下格式的数据集

df = pd.DataFrame([[1, 'Label1', 0, 8, 2], [1, 'Label3', 0, 20, 5], [2, 'Label5', 1, 20, 2], [2, 'Label4', 1, 11, 0], 
              [5, 'Label2', 0, 0, -4],[1, 'Label2', 1, 8, 2], [2, 'Label5', 0, 20, 5], [3, 'Label2', 1, 20, 2], [4, 'Label4', 0, 1, 0], 
              [5, 'Label3', 0, 1, -4],[1, 'Label3', 1, 8, 2], [2, 'Label4', 0, 20, 5], [3, 'Label1', 1, 20, 2], [4, 'Label3', 0, 1, 0], 
              [5, 'Label4', 0, 1, -4],[1, 'Label4', 1, 8, 2], [2, 'Label3', 0, 20, 5], [3, 'Label3', 1, 20, 2], [4, 'Label5', 0, 1, 0], 
              [5, 'Label5', 0, 1, -4]],
              columns=['ID', 'Label', 'Status', 'Coeff', 'result'])

cm = {'TP': 0,'FP': 0}

对于df中的每个ID,当Status为1时,我想找到Coeff列大于Result的次数。如果这个计数大于3,那么TP应该加1,如果小于3,那么FP应该加1。

示例:当ID 为1111 且Status 为1 时,如果该特定ID 的Coeff 列大于Result 列两次,则FP 必须加1。

我尝试为每个 ID 添加一个名为 count 的新列,并在每次列 Coeff 大于 Result 时将值分配为 1。

for ID in df.groupby('ID'): 
  df.loc[(df['Coeff'] > df['Result']), 'count'] = 1
  df_new = list(df[['ID','count']].groupby(df['ID']))

然后我想找出count里面是否有数字1。如果是,则增加TP。否则,递增FP

但我无法做到。

如何获得所需的结果?

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    应该对掩码比较进行简单的分组操作:

    v = df.Coeff.gt(df.result).where(df.Status.astype(bool)).groupby(df.ID).sum()
    

    或者(保留dtype=int,谢谢piR!),

    v = df.Coeff.gt(df.result).where(df.Status.astype(bool), 0).groupby(df.ID).sum()
    

    v   # second expression result
    
    ID
    1    3
    2    2
    3    3
    4    0
    5    0
    dtype: int64
    

    现在,

    cm['TP'] = v.gt(3).sum()
    cm['FP'] = v.lt(3).sum()
    

    详细信息
    df.Coeff.gt(df.result) 返回一个掩码。现在,隐藏所有df.Status 不为1 的值。这是使用(df.Coeff > df.result).where(df.Status.astype(bool)) 完成的。最后,获取这个被屏蔽的结果,并在ID 上分组,然后加上一个总和来得到你的结果。

    【讨论】:

    • df.Coeff.gt(df.result).where(df.Status.astype(bool), 0).groupby(df.ID).sum()
    • @piRSquared 用 0 替换效率更高吗?
    • 偏好,因为它保持 dtype int
    猜你喜欢
    • 2021-01-18
    • 1970-01-01
    • 2019-04-04
    • 2019-02-24
    • 2021-02-25
    • 2022-06-13
    • 2022-11-30
    • 2019-10-15
    • 1970-01-01
    相关资源
    最近更新 更多