代码之家  ›  专栏  ›  技术社区  ›  Raven Cheuk

在Pandas的groupby上使用lambda函数时的奇怪行为

  •  1
  • Raven Cheuk  · 技术社区  · 6 年前

    我有一只熊猫 DataFrame 'A' 'B' ,并且每个组中缺少一个元素。

    df4 = pd.DataFrame({'Name' : ['A', 'A', 'A', 'A', 'B', 'B', 'B'], 
                        'X' : [0, 0.5,1, np.nan, 1,np.nan,1]})
    
    Name    X
    A       0.0
    A       0.5
    A       1.0
    A       nan
    B       1.0
    B       nan
    B       1.0
    

    我想使用lambda函数来填充每个组缺少的数据

    x.mean()

    df4.groupby('Name')['X'].transform(lambda x: x.fillna(x.mean()))
    0    0.0
    1    0.5
    2    1.0
    3    0.5 <------ Filled as 0.5
    4    1.0
    5    1.0 <------ Filled as 1
    6    1.0
    

    如果我使用 x、 平均值() 1.5/3 哪个是 0.5 . B组也一样。

    使用时的奇怪行为 x.std()

    但是,如果我使用 x、 标准() 0 , 0.5 1.0 0.408 . 但是,lambda函数给出了以下输出。

    df4.groupby('Name')['X'].transform(lambda x: x.fillna(x.std()))
    0    0.0
    1    0.5
    2    1.0
    3    0.5 <------ Filled as 0.5 instead of 0.4082
    4    1.0
    5    0.0 <------ Correct
    6    1.0 
    

    有人能解释一下这种行为吗?0.5是从哪里来的?

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

    pandas.Series.std ddof=1 ddof=0 :

    print (df4.groupby('Name')['X'].transform(lambda x: x.fillna(x.std(ddof=0))))
    0    0.000000
    1    0.500000
    2    1.000000
    3    0.408248
    4    1.000000
    5    0.000000
    6    1.000000
    Name: X, dtype: float64