我在一个pandas dataframe中有这个列:
df = pd.DataFrame({'City': ['Barcelona', 'Barcelona', False, False, False, 'Barcelona', 'Paris', False, 'London', False, 'London']})
City
0 Barcelona
1 Barcelona
2 False
3 False
4 False
5 Barcelona
6 Paris
7 False
8 London
9 False
10 London
我想要这个结果(注意巴黎和伦敦之间的False):
out = pd.DataFrame({'City': ['Barcelona', 'Barcelona', 'Barcelona', 'Barcelona', 'Barcelona', 'Barcelona', 'Paris', False, 'London', 'London', 'London']})
City
0 Barcelona
1 Barcelona
2 Barcelona
3 Barcelona
4 Barcelona
5 Barcelona
6 Paris
7 False
8 London
9 London
10 London
包含Barcelona的两个单元格之间的False值应该都更改为Barcelona。然而,巴黎和伦敦之间的单元格应该保持为False,因为我们不知道它对应的是哪个城市。最后,对于最后一个缺少的伦敦,它也应该更改并包含这个城市。
我尝试只考虑单元格的上下部分来更改False值,当然,只有最后一个缺失值更改为伦敦。
然而,我认为可以有一个解决方案,即创建一个临时列,该列传播连续值序列之前提到的最后一个城市的名称,并且仅在下一个有效城市与正在传播的城市相同时才将数据传输到有效列。如果不是,则应拒绝传播,并保留False值。
这只是一个想法,我不知道是否可以这样做,我也不知道如何建立它。我如何解决我的问题?有没有直接的方法?
2条答案
按热度按时间cngwdvgl1#
您可以将
False
替换为NaN
,执行双重ffill
/bfill
,并仅保留布尔索引的相同填充:输出:
中间体:
nqwrtyyt2#