使用iloc从另一个数据框更新熊猫数据框

时间:2019-11-19 21:45:27

标签: python pandas dataframe

长话短说:我有一个像这样的模板的DataFrame:

         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

然后我使用一种算法来解决旅行商问题。我的解决方案是一个列表,像这样:

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

为清楚起见,df.iloc [4]应该在第一位置,然后是df.iloc [5],df.iloc [2],等等...所以我创建了一个新的空DF:

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

最后,我尝试了这个简单的for循环来更新右侧odd中的df_sorted:

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

但是df_sorted在循环结束时仍然为空...是否可以使用另一个的iloc更新新的DF?

2 个答案:

答案 0 :(得分:2)

您已经提到iloc,为什么不尝试:

df.iloc[sorting_order]

输出:

             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

答案 1 :(得分:1)

只需重新索引数据框,然后重置索引即可。

>>> 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