我有一个如下所示的数据框 df
Node COMMODITY_CODE DAY Capacity_Case Capacity_Delivery case_ratio deliveries_ratio window_count
7014.0 SCFZ 1 26610.0 12.0 0.357854 0.354839. 3
7014.0 SCFZ 2 25551.0 11.0 0.457945 0.423077 3
7014.0 SCFZ 3 30669.0 13.0 0.283379 0.258621 3
7030.0 SCDD 1 34244.0 16.0 0.316505 0.300000 4
7030.0 SCDD 2 25954.0 13.0 0.236513 0.232558 4
我想按 Node、DAY、COMMODITY_CODE 进行分组,并应用 ifelse 函数来估算空记录的值。这里我的条件如下:
对于组(节点、DAY、COMMODITY_CODE)
如果 Delivery_ratio 为空,那么我想用组的mean(delivery_ratio) 替换并将其分配给delivery_ratio_filled
如果 case_ratio 为空,那么我想用组的mean(case_ratio) 替换并将其分配给case_ratio_filled
如果对于组(Node, DAY, COMMODITY_CODE),
Delivery_ratio_filled 为 null,则为其分配 1/window_count 值
case_ratio_filled 为 null,则为其分配 1/window_count
我已经使用 dplyr 包在 R 中轻松完成了此任务,我基本上希望使用 pandas 在 Python 中实现相同的功能。
df %>%
group_by(Node, DAY_OF_WK, COMMODITY_CODE) %>%
mutate(delivery_ratio_filled = ifelse(!is.na(delivery_ratio),
delivery_ratio,
mean(delivery_ratio)),
case_ratio_filled = ifelse(!is.na(case_ratio),
case_ratio,
mean(case_ratio))) %>%
mutate(delivery_ratio_filled = ifelse(!is.na(delivery_ratio_filled),
delivery_ratio_filled,
1.0 / window_count),
case_ratio_filled = ifelse(!is.na(case_ratio_filled),
case_ratio_filled,
1.0 / window_count))
当年话下
梦里花落0921
相关分类