首页 > 解决方案 > Python:根据第二个数据帧中的值对数据帧进行排序

问题描述

我对 Python 很陌生,我需要帮助,因为我想不出解决方案。

更新:如果出现平局,我可能需要第三个数据框。如果相关,第 2 列中的值只能是从 1 到 4 的 int。

我有三个数据框:

数据框 1:

      col1  col2  
0       B    1    
1       Y    2    
2       A    3 
3       A    3
4       C    4
5       C    4

数据框 2:

      col1  col2  
0      S     1   
1      P     2    
2      P     2
3      J     4
4      J     4   

数据框 3:

      col1  col2  
0      N     1    
1      L     2    
2      L     2 
3      O     3

我需要找到一种方法对它们中的每一个进行排序,以便如果 df1 中的 col2 中的一个元素也在 df2 中的 col2 中,它们分别占据最后和第一个位置。

现在,还有第三个df。我还需要应用上面的逻辑,所以结果看起来像这样。我们不在乎中间是什么,只要后续数据帧的第一个和最后一个位置匹配,如果有共同的元素。

所需的输出应该是这样的:

数据框 1:

      col1  col2  
0      B     1    
1      Y     2   
2      A     3
3      A     3
4      C     4
5      C     4 

数据框 2:

      col1  col2  
0      J      4  
1      J      4   
2      S      1
3      P      2
4      P      2  

数据框 3:

      col1  col2  
0      L      2  
1      L      2   
2      N      1
3      O      3

有任何想法吗?非常感谢您的帮助!

标签: pythondataframesorting

解决方案


因此,我们的目标是将共同值移动到结尾df1和开头df2

一、找到共同的价值观

common = pd.merge(df1[['col2']], df2[['col2']], on='col2', how='inner')['col2'].unique().tolist()

然后,排序df1

df1 = df1.sort_values('col2', ascending=True, key=lambda x: x in common)

然后,排序df2

df2 = df2.sort_values('col2', ascending=False, key=lambda x: x in common)

推荐阅读