【问题标题】:Pandas: group by but showing missing value熊猫:分组但显示缺失值
【发布时间】:2021-08-11 06:49:42
【问题描述】:

数据框 df 的外观如下所示。我想按位置分组,并使用我定义的函数计算每组级别的值。

data

ID   Position   Level    Value
001     N         L         15
001     N         H         21
001     N         L         17
001     S         L         12
001     S         H         20
001     S         L         16

函数如下所示

def rule(df):
    h_value = df.loc[df['level'] == 'H'], value]
    l_value = df.loc[df['level'] == 'L'], value].mean()

    df['dtm'] = h_value - l_value
    
    return df

这是 groupby 代码。

new_df = df.groupby(['ID','Position']).apply(lambda x: rule(x))

但结果(new_df)显示

ID   Position   Level    Value     dtm     expected result of dtm
001     N         L         15     Nan              5
001     N         H         21      5               5
001     N         L         17     Nan              5
001     S         L         12     Nan              6
001     S         H         20      6               6
001     S         L         16     Nan              6

如何在每组位置中使用相同的 dtm 值填充缺失值。谢谢

【问题讨论】:

    标签: python-3.x pandas dataframe pandas-groupby


    【解决方案1】:

    h_value = df.loc[df['Level'] == 'H', "Value"] 返回一个pd.Series。减号操作还返回一个Series,它只会通过Index 分配值。

    要解决此问题,您可以添加iat[0],即h_value = df.loc[df['Level'] == 'H', "Value"].iat[0],结果会正确传播。

       ID Position Level  Value  dtm
    0   1        N     L     15  5.0
    1   1        N     H     21  5.0
    2   1        N     L     17  5.0
    3   1        S     L     12  6.0
    4   1        S     H     20  6.0
    5   1        S     L     16  6.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 2021-07-02
      • 1970-01-01
      • 2017-12-12
      • 2021-11-28
      相关资源
      最近更新 更多