Dies sind meine beiden Datenrahmen, die in zwei Variablen gespeichert sind:
> print(df.head())
>
club_name tr_jan tr_dec year
0 ADO Den Haag 1368 1422 2010
1 ADO Den Haag 1455 1477 2011
2 ADO Den Haag 1461 1443 2012
3 ADO Den Haag 1437 1383 2013
4 ADO Den Haag 1386 1422 2014
> print(rankingdf.head())
>
club_name ranking year
0 ADO Den Haag 12 2010
1 ADO Den Haag 13 2011
2 ADO Den Haag 11 2012
3 ADO Den Haag 14 2013
4 ADO Den Haag 17 2014
Ich versuche, diese beiden mit diesem Code zusammenzuführen:
new_df = df.merge(ranking_df, on=['club_name', 'year'], how='left')
Das how = 'left' wird hinzugefügt, weil ich in meinem Ranking_df weniger Datenpunkte habe als in meinem Standard-df.
Das erwartete Verhalten ist als solches:
> print(new_df.head())
>
club_name tr_jan tr_dec year ranking
0 ADO Den Haag 1368 1422 2010 12
1 ADO Den Haag 1455 1477 2011 13
2 ADO Den Haag 1461 1443 2012 11
3 ADO Den Haag 1437 1383 2013 14
4 ADO Den Haag 1386 1422 2014 17
Aber ich bekomme diesen Fehler:
ValueError: Sie versuchen, Objekt- und Int64-Spalten zusammenzuführen. Wenn Sie fortfahren möchten, sollten Sie pd.concat verwenden
Aber ich möchte nicht concat verwenden, da ich die Bäume zusammenführen und nicht nur hinzufügen möchte.
Ein anderes merkwürdiges Verhalten ist, dass mein Code funktioniert, wenn ich die erste df in .csv speichere und diese .csv dann in einen Datenrahmen lade.
Der Code dafür:
df = pd.DataFrame(data_points, columns=['club_name', 'tr_jan', 'tr_dec', 'year'])
df.to_csv('preliminary.csv')
df = pd.read_csv('preliminary.csv', index_col=0)
ranking_df = pd.DataFrame(rankings, columns=['club_name', 'ranking', 'year'])
new_df = df.merge(ranking_df, on=['club_name', 'year'], how='left')
Ich denke, dass es mit dem Parameter index_col = 0 zu tun hat. Aber ich habe keine Ahnung, wie ich es reparieren kann, ohne es speichern zu müssen. Es macht nicht viel aus, aber es ist irgendwie ärgerlich, dass ich das tun muss.