我的 Dataframe 如下所示:
Name Date Condition Status
A 17-12-2021
A 18-12-2022
A 19-12-2023
A 20-12-2023 0 Attack
A 21-12-2023
A 22-12-2024
B 17-12-2021
B 18-12-2022
B 19-12-2023
B 20-12-2023 2 Sprain
B 21-12-2023
B 22-12-2024
C 18-12-2022
C 19-12-2023
C 20-12-2023 1 Nausea
C 21-12-2023
C 22-12-2024
建模假设是状态在实际显示效果之前开始,因此根据用于Map的条件回填什么:dict_map = {0:2,1:1,2:2,3:2,4:2}...即如果条件为0,则需要按2回填,而如果条件为1,则需要按1回填。
理想的输出如下。但是,当我做bfill时,它会一直填充。无论如何,要条件bfill()?:
Name Date Condition Status
A 17-12-2021
A 18-12-2022 Attack
A 19-12-2023 Attack
A 20-12-2023 0 Attack
A 21-12-2023
A 22-12-2024
B 17-12-2021
B 18-12-2022 Sprain
B 19-12-2023 Sprain
B 20-12-2023 2 Sprain
B 21-12-2023
B 22-12-2024
C 18-12-2022
C 19-12-2023 Nausea
C 20-12-2023 1 Nausea
C 21-12-2023
C 22-12-2024
3条答案
按热度按时间kknvjkwl1#
您可以使用反转的
groupby.cumcount
计算掩码,并在将字典中的值Map到map
之后与bfill
“条件”进行比较。将此掩码与where
一起使用,可以仅将回填的状态保持在所需的限制范围内:输出量:
中间体:
h5qlskok2#
按
Series.map
创建helper列new
,其中DataFrame.iloc
用于交换顺序,然后通过将非缺失值与累积和进行比较并按GroupBy.cumcount
将计数器与向前填充缺失值进行比较(因为交换了顺序),按helper组创建掩码。最后向后填充缺失值并在Series.where
中设置NaN
s:mum43rcc3#
另一种可能的解决方案:
输出量: