根据行和列的值填充NaN值

时间:2018-11-27 20:03:04

标签: python pandas

我有以下虚拟数据框:

City       Longitude     Latitude
new mexico  1.94          2.34
berlin       2.44         5.33
london       1.1           2.44
new mexico    nan          nan
tokyo         2.2          3.3
berlin        nan           nan
new york      2.5           1.44
dakota         2             5.4
jakarta        3.4           4.5
london         nan           nan

某些城市被列出多次,但是重复的城市缺少值。 我想使用相同城市的值在经度和纬度列中填充某些城市的nan值,我尝试使用ffil和向后填充,但由于缺少的值未遵循模式,因此无法正常工作。

1 个答案:

答案 0 :(得分:2)

您可以按LongitudeLatitude列进行排序,以使NaN位于底部,然后使用groupbyffill,最后重新按您的索引排序:

df.sort_values(['Longitude', 'Latitude']).groupby('City').ffill().sort_index()

         City  Longitude  Latitude
0  new mexico       1.94      2.34
1      berlin       2.44      5.33
2      london       1.10      2.44
3  new mexico       1.94      2.34
4       tokyo       2.20      3.30
5      berlin       2.44      5.33
6    new york       2.50      1.44
7      dakota       2.00      5.40
8     jakarta       3.40      4.50
9      london       1.10      2.44

或更妙的是,只需先按City排序,然后按LongitudeLatitude排序,然后使用ffill而不使用groupby:

df.sort_values(['City','Longitude', 'Latitude']).ffill().sort_index()

         City  Longitude  Latitude
0  new mexico       1.94      2.34
1      berlin       2.44      5.33
2      london       1.10      2.44
3  new mexico       1.94      2.34
4       tokyo       2.20      3.30
5      berlin       2.44      5.33
6    new york       2.50      1.44
7      dakota       2.00      5.40
8     jakarta       3.40      4.50
9      london       1.10      2.44