为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

汪汪一只猫 2021-10-19 15:17:04
我有任意数量的数据帧(在这种情况下为 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     SpeedLondon     Rio       Beijing   NaN     2000London     Sydney    NaN       NaN     2000London     Florence  Rio       Warsaw  1000London     Florence  Rio       Oslo     500London     Rio       Budapest  NaN      500Budapest   Warsaw    NaN       NaN      500我首先附加数据帧: df.append(df1).append(df2)
查看完整描述

2 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

首先将所有数据帧连接在一起并按列排序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


查看完整回答
反对 回复 2021-10-19
?
隔江千里

TA贡献1906条经验 获得超10个赞

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

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

按多列排序

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

您还可以按索引值排序。


查看完整回答
反对 回复 2021-10-19
  • 2 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信