使用可变列对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数据帧进行排序的主要内容,如果未能解决你的问题,请参考以下文章
如何通过单击列的标题按列对 QTableWidget 进行排序?