python - 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
有任何想法吗?非常感谢您的帮助!
解决方案
因此,我们的目标是将共同值移动到结尾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)
推荐阅读
- r - 滑块输入中的颜色刻度线和刻度线标签 - 闪亮
- c# - Azure Web 服务到 Azure Web 服务经过身份验证的请求
- c - Tensorflow C API:如何修改张量中的值
- c# - c# 使用 += 创建事件方法时更改修饰符
- html - 使用 z-index 但文本仍然没有出现在前面
- c++ - 在 c++ 中替换 c 样式强制转换 (long&)
- r - 拆分名称并在 R 中创建矩阵
- javascript - Npm 流播放器导致未找到 fs 依赖项
- asp.net - 带有角度js的asp.net“put”方法
- python-3.x - Boto3:在 DynamoDB 中使用“NOT IN”进行扫描