如何根据另一个数据帧的按列排序对 pandas 数据帧进行按列排序?

问题描述 投票:0回答:1

我有两个 pandas 数据框,我正在尝试按列对它们进行排序。

一个代表相似词,另一个代表相似度分数。我想按列对相似度得分数据帧进行排序(sort_values,axis=1),对单词的原始数据帧应用相同的排序。它们具有完全相同的索引和列数。

数据框#1(单词):

索引 第 0 栏 第 1 栏 第 2 栏
火车 火箭 汽车 船舶
绘画 画布 油漆 墨水
细菌 感染 污垢 灰尘

数据框#2(相似度得分):

索引 第 0 栏 第 1 栏 第 2 栏
火车 47 80 33
绘画 22 90 30
细菌 77 40 52

所需的数据帧(根据数据帧#2的排序值排序的单词):

索引 第 0 栏 第 1 栏 第 2 栏
火车 汽车 火箭 船舶
绘画 油漆 画布 墨水
细菌 感染 灰尘 污垢

谢谢你。

python pandas dataframe sorting
1个回答
0
投票

代码

out = pd.concat([df1.stack(), df2.stack()], axis=1)\
        .droplevel(1).sort_values(1, ascending=False)\
        .assign(cols=lambda x: x.groupby(level=0).cumcount().astype('str').radd('Col '))\
        .set_index('cols', append=True)[0].unstack().reindex_like(df1)

                Col 0    Col 1     Col 2                                   
Trains           Cars  Rockets     Ships
Paintings       Paint      Ink  Canvases
Germs      Infections     Dust      Dirt

示例代码

import pandas as pd
data1 = {'Col 0': {'Trains': 'Rockets', 'Paintings': 'Canvases', 'Germs': 'Infections'}, 
         'Col 1': {'Trains': 'Cars', 'Paintings': 'Paint', 'Germs': 'Dirt'}, 
         'Col 2': {'Trains': 'Ships', 'Paintings': 'Ink', 'Germs': 'Dust'}}
data2 = {'Col 0': {'Trains': 47, 'Paintings': 22, 'Germs': 77}, 
         'Col 1': {'Trains': 80, 'Paintings': 90, 'Germs': 40}, 
         'Col 2': {'Trains': 33, 'Paintings': 30, 'Germs': 52}}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

df1:

© www.soinside.com 2019 - 2024. All rights reserved.