python - 根据两个数据帧中的条件将列添加到另一个数据帧的数据帧
问题描述
以下数据是从两个较大的数据帧中提取的。df1
{'NID': {7: '212017463',
8: '212017463',
9: '212017463',
10: '212017463',
11: '212017463',
12: '212017463',
13: '212017463'},
'Lact': {7: 1, 8: 2, 9: 3, 10: 4, 11: 5, 12: 6, 13: 7},
'M-305': {7: 5018, 8: 5479, 9: 7134, 10: 9046, 11: 8972, 12: 9360, 13: 5295},
'PI-M': {7: 94, 8: 83, 9: 96, 10: 116, 11: 117, 12: 112, 13: 0}}
自由度 2
{'NID': {1: '212017463', 2: '212017463', 3: '212017463'},
'Lact': {1: 7, 2: 7, 3: 7}}
我想将之前哺乳期(Lact == 6)的 df1 系列 M-305 和 PI-M 与 df2(Lact =7)合并。
如果我做一个简单的合并
df3 = pd.merge(df2, df1[['NID', 'Lact', 'M-305', 'PI-M']], on=['NID', 'Lact'], how='left')
df3
我将 M-305 和 PI-M 合并用于哺乳期 (Lact) 7
NID Lact M-305 PI-M 0 212017463 7 5295 0 1 212017463 7 5295 0 2 212017463 7 5295 0
我想得到的输出是 M-305 = 9360 和 PI-M = 110 (Lact 6) 值
有没有办法将 lact 与 lact-1 合并
谢谢
约翰
解决方案
如果您习惯了 SQL 及其JOIN
操作的灵活性,那么不幸的是,Pandas 与这些不匹配。Pandas 仅提供等值连接(两个框架上的连接列必须匹配)和有限范围连接(形式为merge_asof
)。
您可以手动计算连接列:
pd.merge(
df2.assign(Lact_Merge = df2['Lact'] - 1),
df1[['NID', 'Lact', 'M-305', 'PI-M']],
left_on=['NID', 'Lact_Merge'],
right_on=['NID', 'Lact'],
how='left'
).drop(columns=['Lact_Merge', 'Lact_y']).rename(columns={'Lact_x': 'Lact'})
(我交替使用“join”和“merge”。我有一个后台 SQL Server,其中此类操作相当于INNER JOIN
, LEFT JOIN
, ...)
推荐阅读
- dependency-injection - 如何解决来自特定 koin 模块的变量的依赖关系?
- android - 从数据库动态接收数据时设置文本的背景颜色
- c++ - 虽然循环不读取整个 ifstream 文件
- php - Docusign api - 代表另一个用户发送信封
- git - 在签出开发分支时,对来自其他分支的文件的更改仍然存在
- ios - iOS - 如何区分 UI 和单元测试,以及如何在这种具体情况下使用它们?
- c# - 使用 C# 和 Powershell 从 SQL Server 视图生成 CSV 文件时 CPU 使用率高
- reactjs - 我使用 android studio 在 linux 中运行 react native 应用程序。但我总是得到构建工具 27.0.3 的错误
- scala - Kryo 序列化问题 Spark
- vba - 是什么导致此下标超出范围错误?