在其他列中计算具有多个条件的 NaN 单列

Posted

技术标签:

【中文标题】在其他列中计算具有多个条件的 NaN 单列【英文标题】:Count NaN Single Column with Multiple Conditions in Other Columns 【发布时间】:2021-07-02 18:34:27 【问题描述】:

我似乎无法通过尝试许多不同的事情来解决这个问题,而且我在网络上显然没有找到答案。我的数据在单列“数据”中具有值,我需要根据其他两列中的条件分组来求和或计算该列中 NaN 的出现次数,例如下面的数据:

    site     data      day     month   year
0   Red      NaN        20     1       2020
1   Red      5.6        31     1       2020
2   Red      NaN         6     1       2020
3   Red      NaN         9     2       2020
3   Blue     4.5        14     1       2020
4   Blue     6.2        19     2       2020
5   Blue     NaN        11     2       2020

结果应该是这样的:

   site    month    count    sumNaN  
0  Red     1        3        2
1  Red     2        1        1
2  Blue    1        1        0
3  Blue    2        2        1

非常感谢。

【问题讨论】:

【参考方案1】:

试试:

(df.assign(data=df['data'].isna())
   .groupby(['site','month'])
   ['data'].agg(['count','sum'])
   .reset_index()
)

输出:

   site  month  count  sum
0  Blue      1      1    0
1  Blue      2      2    1
2   Red      1      3    2
3   Red      2      1    1

【讨论】:

【参考方案2】:

您可以在agg 中使用命名聚合:

(df.groupby(['site', 'month'], as_index = False)
   .agg(count=('data', 'size'), 
        sumNaN=('data', lambda df: df.isna().sum())
        )
 )

   site  month  count  sumNaN
0  Blue      1      1     0.0
1  Blue      2      2     1.0
2   Red      1      3     2.0
3   Red      2      1     1.0

【讨论】:

以上是关于在其他列中计算具有多个条件的 NaN 单列的主要内容,如果未能解决你的问题,请参考以下文章

Access 2007 Update Query 在单列上具有多个条件

用于从具有多个条件的多个表中的多个列中获取数据的存储过程

FillNaN 具有多个条件并在 Pandas 中使用 n-1 和 n+2 值

在其他列中选择满足多个条件的列值

如何根据python中的多个条件计算列中的唯一行

归一化具有多个条件的数据帧,R