【问题标题】:Groupby mean of int group variable and float values return nothing整数组变量的分组平均值和浮点值不返回任何内容
【发布时间】:2019-04-23 16:40:24
【问题描述】:

我的数据框中有以下两列

      hs92_product_id  Dummy_Weight
2578           854470        0.0000
2579           854470        0.0000
2580           854470        0.0000
2581           111111        0.5000
2582           111111        0.1000
2583           111111        0.0000
2584           111111        0.0000
2585           222222        0.2500
2586           222222        0.2500
2587           222222        0.0000

其中 Dummy_Weight 是 float64,hs92_product_id 是 int64

当我尝试按产品组求平均值时:

df['风险加权'] = df.groupby('hs92_product_id')['Dummy_Weight'].mean()

它返回一列缺失值,为什么?

【问题讨论】:

    标签: python pandas mean


    【解决方案1】:

    您需要 GroupBy.transform 来填充由与原始 DataFrame 大小相同的聚合值填充的系列:

    df['Risk Weighted'] = df.groupby('hs92_product_id')['Dummy_Weight'].transform('mean')
    print (df)
          hs92_product_id  Dummy_Weight  Risk Weighted
    2578           854470          0.00       0.000000
    2579           854470          0.00       0.000000
    2580           854470          0.00       0.000000
    2581           111111          0.50       0.150000
    2582           111111          0.10       0.150000
    2583           111111          0.00       0.150000
    2584           111111          0.00       0.150000
    2585           222222          0.25       0.166667
    2586           222222          0.25       0.166667
    2587           222222          0.00       0.166667
    

    它返回一列缺失值,为什么?

    如果检查groupby + mean 的输出得到:

    print (df.groupby('hs92_product_id')['Dummy_Weight'].mean())
    hs92_product_id
    111111    0.150000
    222222    0.166667
    854470    0.000000
    Name: Dummy_Weight, dtype: float64
    

    这里index 是由hs92_product_idmean 的唯一值创建的。分配给新列后,熊猫尝试对齐索引,如果不匹配,则填充缺失值。

    在更改的数据样本中验证:

    print (df)
            hs92_product_id  Dummy_Weight
    2578             854470          0.00
    111111           854470          0.00 <- changed index value
    2580             854470          0.00
    2581             111111          0.50
    2582             111111          0.10
    2583             111111          0.00
    2584             111111          0.00
    2585             222222          0.25
    2586             222222          0.25
    2587             222222          0.00
    
    print (df.groupby('hs92_product_id')['Dummy_Weight'].mean())
    111111    0.150000 <- same index value exist in original df
    222222    0.166667
    854470    0.000000
    Name: Dummy_Weight, dtype: float64
    
    df['Risk Weighted'] = df.groupby('hs92_product_id')['Dummy_Weight'].mean()
    print (df)
            hs92_product_id  Dummy_Weight  Risk Weighted
    2578             854470          0.00            NaN
    111111           854470          0.00           0.15 <- data if indexes are aligned
    2580             854470          0.00            NaN
    2581             111111          0.50            NaN
    2582             111111          0.10            NaN
    2583             111111          0.00            NaN
    2584             111111          0.00            NaN
    2585             222222          0.25            NaN
    2586             222222          0.25            NaN
    2587             222222          0.00            NaN
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多