代码之家  ›  专栏  ›  技术社区  ›  Snow bunting

忽略字典“count\u if=1”的聚合。

  •  2
  • Snow bunting  · 技术社区  · 6 年前

    sum 然后得到 NaN 如果一个组的所有值 . 这适用于 .agg('sum', min_count=1) 但是 min_count 在使用聚合字典时被忽略。

    我在这里遗漏了什么?我怎样才能修复它?

    例子:

    import pandas as pd
    import numpy as np
    d = {'l':  ['a', 'b', 'a', 'b', 'c', 'c'],
         'v': [-1, 1, np.nan, 1, np.nan, np.nan],
         'w': [-1, 1, np.nan, 1, np.nan, np.nan]}
    df = pd.DataFrame(d)
    

    0.0 min_count=1

    print(df.groupby('l')['v'].agg('sum'))
    > l
    > a   -1.0
    > b    2.0
    > c    0.0
    > Name: v, dtype: float64
    
    print(df.groupby('l')['v'].agg('sum', min_count=1))
    > l
    > a   -1.0
    > b    2.0
    > c    NaN
    > Name: v, dtype: float64
    

    df.groupby('l').agg({'v':'sum', 'w':'mean'}, min_count=1)
    > Name: v, dtype: float64
    >      v    w
    > l          
    > a -1.0 -1.0
    > b  2.0  1.0
    > c  0.0  NaN
    

    谢谢你的帮助!

    1 回复  |  直到 6 年前
        1
  •  3
  •   jezrael    6 年前

    可以使用lambda函数:

    df1 = df.groupby('l').agg({'v': lambda x: x.sum(min_count=1), 'w': 'mean'})
    print (df1)
         v    w
    l          
    a -1.0 -1.0
    b  2.0  1.0
    c  NaN  NaN