使用可变列对 Pandas 数据框进行排序

我有任意数量的数据帧(在这种情况下为 3)。我试图找出起始目的地(A 列)和最终目的地(列变量)之间速度最高的行程。这些行程需要存储在新的数据框中。


d= {'A':['London', 'London', 'London', 'London', 'Budapest'], 'B': 

['Beijing', 'Sydney', 'Warsaw', 'Budapest', 'Warsaw'],'Speed': 

[1000,2000,500,499,500]}

df = pd.DataFrame(data=d)


 d1= {'A':['London', 'London', 'London',  'Budapest'], 'B':['Rio', 'Rio', 

'Rio', 'Rio'],'C':['Beijing', 'Sydney', 'Budapest', 'Warsaw'],'Speed': 

[2000,1000,500,500]}

df1= pd.DataFrame(data=d1)


d2= {'A':['London', 'London', 'London', 'London'],'B':['Florence', 

'Florence', 'Florence', 'Florence'],'C':['Rio', 'Rio', 'Rio', 'Rio'], 'D': 

['Beijing', 'Sydney', 'Oslo', 'Warsaw'],'Speed':[500,500,500,1000]}

df2= pd.DataFrame(data=d2)

此特定情况下所需的输出如下所示:


   A        B          C        D     Speed

London     Rio       Beijing   NaN     2000

London     Sydney    NaN       NaN     2000

London     Florence  Rio       Warsaw  1000

London     Florence  Rio       Oslo     500

London     Rio       Budapest  NaN      500

Budapest   Warsaw    NaN       NaN      500

我首先附加数据帧:


 df.append(df1).append(df2)


汪汪一只猫
浏览 159回答 2
2回答

ITMISS

首先将所有数据帧连接在一起并按列排序Speed。然后通过布尔掩码过滤,ffill用于向前填充缺失值duplicated:df = pd.concat([df, df1, df2]).sort_values('Speed', ascending=False)df = df[~df.ffill(axis=1).duplicated(['A','D'])].reset_index(drop=True)    print (df)          A         B         C       D  Speed0    London    Sydney       NaN     NaN   20001    London       Rio   Beijing     NaN   20002    London  Florence       Rio  Warsaw   10003  Budapest    Warsaw       NaN     NaN    5004    London       Rio  Budapest     NaN    5005    London  Florence       Rio    Oslo    500

隔江千里

您可以使用值或索引对数据框进行排序。例如,如果您想按 B 列排序 - 您可以编写如下代码:对于单列`df.sort_values(by=['B'])`按多列排序df.sort_values(by=['col1', 'col2'])您还可以按索引值排序。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python