【发布时间】:2021-11-15 01:46:05
【问题描述】:
我有两个 Pandas 数据帧,我需要合并它们以获取一组员工的完整历史记录。
两个框架都包含员工ID和数据有效时间的时间戳。但是一个表中的时间戳有时有点“晚”,这意味着第二个数据帧的时间戳是 on 或 在第一个数据帧中的时间戳。
示例数据
import pandas as pd
df = pd.DataFrame(
{'ID': [1000, 1000, 1002, 1003, 1004],
'Start Date': [
pd.Timestamp('2021-01-01'),
pd.Timestamp('2021-01-01'),
pd.Timestamp('2021-04-01'),
pd.Timestamp('2021-01-01'),
pd.Timestamp('2021-01-01')
],
'Name': ['Joe', 'Bill', 'Bill', 'Martin', 'Jane']
}
)
df2 = pd.DataFrame(
{'ID': [1000, 1002, 1002, 1003, 1004],
'Start Date': [
pd.Timestamp('2021-01-01'),
pd.Timestamp('2021-01-01'),
pd.Timestamp('2021-04-05'),
pd.Timestamp('2021-01-01'),
pd.Timestamp('2021-01-10')
],
'Position': ['Operator', 'Operator', 'Manager', 'Operator', 'Operator']})
df = df.merge(df2, how='left', on=['ID', 'Start Date'])
print(df)
输出
df
ID Start Date Name
0 1000 2021-01-01 Joe
1 1000 2021-01-01 Bill
2 1002 2021-04-01 Bill
3 1003 2021-01-01 Martin
4 1004 2021-01-01 Jane
df2
ID Start Date Position
0 1000 2021-01-01 Operator
1 1002 2021-01-01 Operator
2 1002 2021-04-05 Manager
3 1003 2021-01-01 Operator
4 1004 2021-01-10 Operator
合并的df
ID Start Date Name Position
0 1000 2021-01-01 Joe Operator
1 1000 2021-01-01 Bill Operator
2 1002 2021-04-01 Bill NaN
3 1003 2021-01-01 Martin Operator
4 1004 2021-01-01 Jane NaN
我想整理代码或修改数据,以便将一个数据框中的 bill 和 Jane 的数据与另一个数据框中的移位行合并。
我想过(但不知道怎么做)的一些解决方案是:
- 在第二个数据框中填充数据,以便所有行都显示在给定的日期范围内(例如,确保账单“经理”标题存在于 2021 年 1 月 2 日及以后的所有日期,等等所有 ID )
- 将合并命令与允许在第二个数据帧中“向前搜索”直到找到匹配项的命令交换。
【问题讨论】:
-
如果可以的话,请就您的共享数据进一步分解您的解释。如果@BENY 的解决方案足够,您可以忽略此评论
标签: pandas dataframe merge time-series