2
我想在两个数据框中的两个日期列之间插入python熊猫。在两个数据框之间插入日期列熊猫
我想给“EVENT”列“DrillDate”从dfDrillTable结合起来,在dfCompTable的下一个最接近的日期次数。 dfDrillTable具有“Drilldate”,将始终发生在dfCompTable“OpenDate”之前之前。 dfDrillTable和dfCompTable 必须都加入“名称”,但只有dfDrillTable有一个独特的“EVENT”,我试图链接两个数据框。
在钻取表中存在一些不存在于dfCompTable(和vera)中的EVENT数据。我需要这些仍然进入表中,但作为价值不存在的空白。
我已经创建了两个示例数据框供以下参考。然后第三个显示我想要的结果。
我知道有多种方法可以用outerjoins和this和this做到这一点,但我只是寻找在两个日期之间插入的最干净,最简单的方法。
#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
谢谢,这适用于quesition中的数据框。 (尽管如此,我认为你在额外的_on =“DrillDate”中)。当我用我的实际数据运行公式时,我得到一个“ValueError:左键必须排序”,我排序他们,但仍然不会工作。有重复的数据和数据点也不在这两个数据框中。这是否重要?再次感谢。 – brandog
您能否生成失败的输入? –
嗨,很抱歉找回这么晚。我看到它失败的原因是因为在我的原始表格中,开放日期有空白值。我删除了这些代码并没有发生错误。输出不是我想要的,但。它没有通过“名称”列加入值。相反,它只是找到最接近的日期,而不考虑“名称”。我已经更新了上述问题中的代码以显示此内容。有没有办法再添加一块逻辑来仅在名称列是=时插入?谢谢。 – brandog