简体   繁体   中英

Update a pandas DataFrame with iloc from another Dataframe

Long story short: I've got a DataFrame like this template:

         city  Longitude   Latitude
0     Gotham City  35.699708   2.158089
1         Xibalba  35.676700   4.199400
2        Eldorado  35.680871   6.165926
3        Atlantis  35.680339   8.165897
4         Elysium  35.678219  10.165940
5  Lost City of Z  35.678037  12.166077
6       Parnasius  35.678192  14.165853

And I used an algorithm to solve the Traveling Salesman Problem. My solution is a list, like this:

sorting_order = [4,5,2,1,0,6,3]

To be clear, df.iloc[4] should be in first position, then df.iloc[5], df.iloc[2], etc... So I created a new empty DF:

df_sorted = pd.DataFrame(columns =['city','Longitude','Latitude'])

And finally, I tried this simple for loop to update df_sorted in the right oder:

for index in sorting_order:
    df_sorted.append(df.iloc[index])

But df_sorted remains empty at the end of the loop... Could I update a new DF using the iloc of an other or not?

You already mention iloc , why don't you try:

df.iloc[sorting_order]

Output:

             city  Longitude   Latitude
4         Elysium  35.678219  10.165940
5  Lost City of Z  35.678037  12.166077
2        Eldorado  35.680871   6.165926
1         Xibalba  35.676700   4.199400
0     Gotham City  35.699708   2.158089
6       Parnasius  35.678192  14.165853
3        Atlantis  35.680339   8.165897

Just re-index the dataframe, then reset the index.

>>> df.reindex(sorting_order).reset_index(drop=True)
             city  Longitude   Latitude
0         Elysium  35.678219  10.165940
1  Lost_City_of_Z  35.678037  12.166077
2        Eldorado  35.680871   6.165926
3         Xibalba  35.676700   4.199400
4     Gotham_City  35.699708   2.158089
5       Parnasius  35.678192  14.165853
6        Atlantis  35.680339   8.165897

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM