最佳答案
这是我的两个数据框架,保存在两个变量中:
> 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
我试着用这个代码合并这两个:
new_df = df.merge(ranking_df, on=['club_name', 'year'], how='left')
添加 how = ‘ left’是因为在 rank _ df 中的数据点少于标准 df 中的数据点。
预期的行为是这样的:
> 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
但我得到了这个错误:
ValueError: 您正试图合并对象和 int64列。如果 您希望继续,应该使用 pd.concat
但是我不希望使用 concat,因为我想合并树,而不仅仅是添加它们。
在我看来,另一个奇怪的行为是,如果我将第一个 df 保存到。然后加载它。将 csv 转换为数据框架。
代码是:
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')
我认为它与 index _ col= 0参数有关。但是我不知道如何在不保存它的情况下修复它,这并不重要,但是我不得不这样做,这有点烦人。