我有两个 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 栏 |
---|---|---|---|
火车 | 汽车 | 火箭 | 船舶 |
绘画 | 油漆 | 画布 | 墨水 |
细菌 | 感染 | 灰尘 | 污垢 |
谢谢你。
代码
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: