我的数据框中有以下两列
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()
它返回缺少值的列,为什么?
答案 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
此处index
由hs92_product_id
与mean
的唯一值创建。将大熊猫分配给新列后,尝试对齐索引,如果不匹配,则填充缺失值。
验证已更改的数据示例:
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