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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用可变列对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)
答案

首先将所有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
另一答案

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

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

按多列排序

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

您还可以按索引值排序。

以上是关于使用可变列对Pandas数据帧进行排序的主要内容,如果未能解决你的问题,请参考以下文章

按r中的列对数据帧进行排序[重复]

Pandas pivot_table,按列对值进行排序

如何通过单击列的标题按列对 QTableWidget 进行排序?

Pandas - 使用 datetimeindex 对数据帧进行排序

按一列对每个组进行排序,并根据每个组获取顶部元素

快速搜索 Pandas 数据框列