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

标签 python pandas dataframe

我有任意数量的数据帧(在本例中为 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 连接在一起并按列速度排序。然后使用 ffill 按 bool 掩码进行过滤,以使用 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

关于python - 使用可变列对 Pandas 数据框进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54343803/

相关文章:

python - 使用 Python C API 将 Python 中的函数移植到 C 时遇到问题

python - timedelta float python

python, pandas - 将键值列遍历为多列

python - 通过迭代将函数应用于数据帧的所有行 - Python

python - 'Cocktail Party' 音频源信号分离

python - 如何在Python中删除日期中的异常值?

python - 通过忽略区分大小写的方式删除重复项并将下一列值添加到 python 中的 pandas 数据框中的第一个值

python - 在不循环的情况下为每一行查找 python pandas 数据框中两组列的交集

python - 将从 REST api 检索到的数据存储到 python 中的变量中

python - 如何用 df.loc 或 df.iloc 替换 df.ix?