Ich versuche, zwischen zwei Datumsspalten aus zwei Datenrahmen in Python Pandas zu interpolieren.Interpolieren Datumsspalten zwischen zwei Datenrahmen Pandas
Ich mag die „EVENT“ Spalten „DrillDate“ kombinieren, von der dfDrillTable zum am nächsten nächsten Vorkommen Datum im dfCompTable. Die dfDrillTable hat ein "Drilldate", das immer vor der dfCompTable "OpenDate" auftritt. Die dfDrillTable und dfCompTable müssen beide auf "Name" verbunden sein, aber nur dfDrillTable hat eine eindeutige "EVENT", die ich versuche, die beiden Datenrahmen zu verknüpfen.
Es gibt einige Bohrlochnamen, die EVENT-Daten in der DrillTable enthalten, die nicht in der dfCompTable (und im Vera-Vera) vorhanden sind. Ich brauche diese, um noch in die Tabelle zu kommen, aber als Leerzeichen, wo die Werte nicht existieren.
Ich habe zwei Beispieldatenrahmen als Referenz unten erstellt. Dann ein Drittel, um das Ergebnis zu zeigen, das ich möchte.
Ich weiß, es gibt mehrere Möglichkeiten, dies zu tun mit äußerenjoins und dies und das, aber ich war nur auf der Suche nach der saubersten, absolut narrensichere Art der Interpolation zwischen zwei Daten.
#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
hier ist der Code der Tabellen
# 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
und das Ergebnis zu schaffen:
# 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
Danke, Dies funktioniert auf die Datenframes in der Frage. (Ich denke, dass Sie in einem extra _on = "DrillDate" obwohl). Wenn ich die Gleichung mit meinen tatsächlichen Daten durchführe, bekomme ich einen "ValueError: Linke Schlüssel müssen sortiert werden", ich sortiere sie aber immer noch nicht. Es gibt Duplikate von Daten und auch Datenpunkte, die nicht in beiden Datenrahmen enthalten sind. ist das wichtig? Danke noch einmal. – brandog
Können Sie eine Eingabe generieren, die fehlschlägt? –
Hallo, tut mir leid, dass ich so spät zurück bin. Ich sah den Grund dafür, dass es fehlgeschlagen war, weil in meiner ursprünglichen Tabelle leere Werte am offenen Datum waren. Ich entfernte diese und der Code lief ohne Fehler. Die Ausgabe ist nicht das, wonach ich gesucht habe. Es verbindet die Werte nicht durch die Spalte "Name". Stattdessen wird nur das nächste Datum gesucht, unabhängig von "Name". Ich habe den Code in der obigen Frage aktualisiert, um dies zu zeigen. Gibt es eine Möglichkeit, einen weiteren Teil der Logik zu interpolieren, wenn die Spalten Name =? Vielen Dank. – brandog