Groupby的int组变量平均值和浮点值不返回

时间:2018-11-21 06:40:43

标签: python pandas mean

我的数据框中有以下两列

      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()

它返回缺少值的列,为什么?

1 个答案:

答案 0 :(得分:0)

对于{系列},您需要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

此处indexhs92_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