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

问题描述 投票:1回答:2

我有任意数量的数据帧(在这种情况下为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)
python pandas dataframe
2个回答
3
投票

首先将所有DataFrame连接起来并按列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  Speed
0    London    Sydney       NaN     NaN   2000
1    London       Rio   Beijing     NaN   2000
2    London  Florence       Rio  Warsaw   1000
3  Budapest    Warsaw       NaN     NaN    500
4    London       Rio  Budapest     NaN    500
5    London  Florence       Rio    Oslo    500

0
投票

您可以使用值或索引对数据框进行排序。例如,如果要按列B排序 - 可以按如下方式编写代码:对于单列

`df.sort_values(by=['B'])`

按多列排序

df.sort_values(by=['col1', 'col2'])

您还可以按索引值排序。

© www.soinside.com 2019 - 2024. All rights reserved.