我有任意数量的数据帧(在这种情况下为 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
隔江千里
TA贡献1906条经验 获得超10个赞
您可以使用值或索引对数据框进行排序。例如,如果您想按 B 列排序 - 您可以编写如下代码:对于单列
`df.sort_values(by=['B'])`
按多列排序
df.sort_values(by=['col1', 'col2'])
您还可以按索引值排序。
添加回答
举报
0/150
提交
取消