Вы можете отсортировать по столбцам Longitude
и Latitude
, чтобы NaN
s находились внизу, затем используйте groupby
и ffill
, и, наконец, выполните повторную сортировку по индексу:
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
, затем Longitude
и Latitude
и используйте ffill
без группировки:
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