【问题标题】:Pandas countifs value from column and other column not null来自列和其他列的 Pandas countifs 值不为空
【发布时间】:2020-04-21 11:32:39
【问题描述】:

我正在尝试在 pandas 中执行与 Excel COUNTIFS 公式等效的操作,其中第一个范围是数据框列,搜索条件是该列中的每个值。第二个搜索范围是不同的列,并且该列中的条件是非空值。

写成 Excel 公式,它看起来像:COUNTIFS(A:A,A2,B:B,"")

这里是一些示例数据:

data = {'ADJL':['BCF-364/BTS-1091/ADJL-4', 'BCF-130/BTS-389/ADJL-1', 'BCF-130/BTS-389/ADJL-1', 'BCF-130/BTS-389/ADJL-1', 'BCF-130/BTS-389/ADJL-1', 'BCF-130/BTS-389/ADJL-1', 'BCF-581/BTS-1742/ADJL-1', 'BCF-581/BTS-1742/ADJL-1'], 
        'LNCEL':['LNBTS-55/LNCEL-63', '', 'LNBTS-801/LNCEL-62', '', 'LNBTS-801/LNCEL-61', '', '', '']} 
df = pd.DataFrame(data)

我需要为此添加两列。第一个是对每个“ADJL”值的计数。我为该专栏找到了这个解决方案:

df['Count_of_ADJL'] = df.groupby('ADJL')['ADJL'].transform('Count_of_ADJL')

我坚持的是下一个,如下面的 Excel 所示。我需要计算 ADJL 中的值在整个 ADJL 列中出现的次数,并且 LNCEL 列不为空。 我删除了许多其他列以简化我的问题,因此我可以添加另一列的解决方案是理想的。

提前非常感谢。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用groupby.transformnp.count_nonzero 作为:

    df['Count_of_ADJL'] = df.groupby('ADJL')['ADJL'].transform('count')
    df['Count_of_ADJL & LNCEL not null'] = df.groupby('ADJL')['LNCEL'].transform(np.count_nonzero)
    #or
    df['Count_of_ADJL & LNCEL not null'] = df.groupby('ADJL')['LNCEL'].transform('count')
    
    print(df)
                          ADJL               LNCEL  Count_of_ADJL  \
    0  BCF-364/BTS-1091/ADJL-4   LNBTS-55/LNCEL-63              1   
    1   BCF-130/BTS-389/ADJL-1                                  5   
    2   BCF-130/BTS-389/ADJL-1  LNBTS-801/LNCEL-62              5   
    3   BCF-130/BTS-389/ADJL-1                                  5   
    4   BCF-130/BTS-389/ADJL-1  LNBTS-801/LNCEL-61              5   
    5   BCF-130/BTS-389/ADJL-1                                  5   
    6  BCF-581/BTS-1742/ADJL-1                                  2   
    7  BCF-581/BTS-1742/ADJL-1                                  2   
    
       Count_of_ADJL & LNCEL not null  
    0                               1  
    1                               2  
    2                               2  
    3                               2  
    4                               2  
    5                               2  
    6                               0  
    7                               0  
    

    【讨论】:

    • 非常感谢 Sandeep,这正是我想要的。 'Count_of_ADJL & LNCEL not null' 方法给了我与 'Count_of_ADJL' 相同的结果,但第二个,使用 .transform('count') 效果很好。再次感谢您的帮助。
    猜你喜欢
    • 2022-07-19
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 2019-04-06
    • 2020-09-07
    相关资源
    最近更新 更多