gpt4 book ai didi

python - 在两个 Dataframes Pandas 之间插入日期列

转载 作者:太空宇宙 更新时间:2023-11-04 05:10:10 25 4
gpt4 key购买 nike

我正在尝试在 python pandas 中的两个数据帧的两个日期列之间进行插值。

我想将 dfDrillTable 中的“EVENT” 列“DrillDate”合并到 dfCompTable 中的最近的下一次发生日期。 dfDrillTable 有一个“Drilldate”,它将始终发生在 dfCompTable“OpenDate”之前。 dfDrillTable 和 dfCompTable 必须都加入“名称”,但只有 dfDrillTable 有一个独特的“EVENT”,我试图将这两个数据帧链接起来。

有些井名在 drillTable 中有 EVENT 数据,但在 dfCompTable(和 visa vera)中不存在。我需要这些仍然进入表格,但在值不存在的地方作为空白。

我创建了两个示例数据框以供引用。然后第三个显示我想要的结果。

我知道有多种方法可以使用外连接、这个和那个来执行此操作,但我只是在寻找在两个日期之间进行插值的最干净、最简单的方法。

    #dfDrillTable

Name EVENT DrillDate
0 W1 E1 2000-01-01
1 W1 E2 2000-03-01
2 W2 E3 2000-04-01
3 W1 E4 2000-05-15
4 W2 E5 2000-01-10
5 W3 E6 2000-02-01
6 G1 E1 2000-02-02

#dfCompTable
Name OpenDate
0 W1 2000-01-02
1 W1 2000-03-15
2 W1 2000-05-10
3 W1 2000-05-20
4 W2 2000-01-15
5 W3 2000-02-10
6 X1 2016-05-05


#dfInterp Outcome


Name EVENT DrillDate OpenDate
0 W1 E1 2000-01-01 2000-01-02
1 W1 E2 2000-03-01 2000-03-15
2 W1 E3 2000-04-01 2000-05-10
3 W1 E4 2000-05-15 2000-05-20
4 W2 E5 2000-01-10 2000-01-15
5 W3 E6 2000-02-01 2000-02-10
6 G1 E1 2000-01-10 NaT
7 X1 NaT 2016-05-05

这是创建表的代码

# Two DataTables
raw_data = {'Name': ['W1', 'W1', 'W2', 'W1', 'W2','W3','G1'],
'EVENT':['E1', 'E2', 'E3', 'E4', 'E5','E6','E1'],
'DrillDate': ['01/01/2000', '03/01/2000', '04/01/2000', '05/15/2000', '01/10/2000','02/01/2000','02/02/2000']}
dfDrillTable = pd.DataFrame(raw_data, columns = ['Name','EVENT','DrillDate'])
dfDrillTable['DrillDate'] = pd.to_datetime(dfDrillTable['DrillDate'])
dfDrillTable

raw_data2 = {'Name': ['W1', 'W1', 'W1', 'W1', 'W2','W3','X1'],
'OpenDate': ['01/02/2000', '03/15/2000', '05/10/2000', '05/20/2000', '01/15/2000','02/10/2000','05/05/2016']}
dfCompTable = pd.DataFrame(raw_data2, columns = ['Name','OpenDate'])
dfCompTable['OpenDate'] = pd.to_datetime(dfCompTable['OpenDate'])
dfCompTable

结果:

# Hopefull Outcome
raw_data = {'Name': ['W1', 'W1', 'W1', 'W1', 'W2','W3','G1','X1'],
'EVENT':['E1', 'E2', 'E3', 'E4', 'E5','E6','E1',''],
'DrillDate': ['01/01/2000', '03/01/2000', '04/01/2000', '05/15/2000', '01/10/2000','02/01/2000','01/10/2000',''],
'OpenDate': ['01/02/2000', '03/15/2000', '05/10/2000', '05/20/2000', '01/15/2000','02/10/2000','','05/05/2016']}
dfInterp = pd.DataFrame(raw_data, columns = ['Name','EVENT','DrillDate','OpenDate'])
dfInterp['DrillDate'] = pd.to_datetime(dfInterp['DrillDate'])
dfInterp['OpenDate'] = pd.to_datetime(dfInterp['OpenDate'])
dfInterp

最佳答案

让我们使用pd.merge_asof : <-- 文档链接

pd.merge_asof 是 0.19.0 版中的新版本确保您安装了最新的 pandas。

dfInterp = pd.merge_asof(dfCompTable.sort_values(by="OpenDate")
,dfDrillTable.sort_values(by="DrillDate")
,left_on="OpenDate",right_on="DrillDate")

dfInterp[['Name_x','EVENT','DrillDate','OpenDate']].sort_values(by='Name_x')

Name_x EVENT DrillDate OpenDate
0 W1 E1 2000-01-01 2000-01-02
3 W1 E2 2000-03-01 2000-03-15
4 W1 E3 2000-04-01 2000-05-10
5 W1 E4 2000-05-15 2000-05-20
1 W2 E5 2000-01-10 2000-01-15
2 W3 E6 2000-02-01 2000-02-10

关于python - 在两个 Dataframes Pandas 之间插入日期列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43194113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com