我需要合并这两个DataFrame。
+-------------------------------------+--+
| df1: | |
+-------------------------------------+--+
| Date Temperature Load | |
| 01-01-2019 25 400 | |
| 02-01-2019 32 487 | |
| 03-01-2019 35 501 | |
| 04-01-2019 28 457 | |
| ' ' ' | |
| ' ' ' | |
| ' ' ' | |
| 31-12-2019 22 385 | |
+-------------------------------------+--+
+----------------------------------+
| df2: |
+----------------------------------+
| Date Holiday |
| 02-03-2019 Mahashivratri |
| 14-04-2019 Good Friday |
| 18-09-2019 Ganesh Chaturthi |
| ' ' |
| ' ' |
| 25-12-2019 Christmas |
+----------------------------------+
我尝试了合并方法。
final = df1.merge(df2, on='Date', how='left')
我也同样尝试了join方法。
final = df1.join(df2, on='Date', how='left')
在这两种情况下,“假日”列均已附加到df1,但其所有值均为NaN。
+-------------------------------------------------+
| final: |
+-------------------------------------------------+
| Date Temperature Load Holiday |
| 01-01-2019 25 400 NaN |
| 02-01-2019 32 487 Nan |
| ' ' ' ' |
| ' ' ' ' |
| 02-03-2019 33 510 NaN |
| ' ' ' ' |
| ' ' ' ' |
| 31-12-2019 22 385 NaN |
+-------------------------------------------------+
我想要实现的是:
+-------------------------------------------------------+
| final: |
+-------------------------------------------------------+
| Date Temperature Load Holiday |
| 01-01-2019 25 400 NaN |
| 02-01-2019 32 487 Nan |
| ' ' ' ' |
| ' ' ' ' |
| 02-03-2019 33 510 Mahashivratri |
| ' ' ' ' |
| ' ' ' ' |
| 31-12-2019 22 385 NaN |
+-------------------------------------------------------+
答案 0 :(得分:1)
您的merge
命令正确且运行正常:
df1 = pd.DataFrame({'Date': ['01-01-2019', '02-03-2019'], 'Temperature': [25,32], 'Load': [400, 501]})
df2 = pd.DataFrame({'Date': ['02-03-2019', '14-04-2019'], 'Holiday': ['Mahashivratri', 'Good Friday']})
df1.merge(df2, on='Date', how='left')
它给出了预期的结果:
Date Temperature Load Holiday
0 01-01-2019 25 400 NaN
1 02-03-2019 32 501 Mahashivratri
问题可能与您的Date
列的dtype有关。您没有显示给我们看什么,但是那是您需要查看的地方,因为其余的都是正确的。
下次,请像上面一样,发布一个自包含的可运行示例程序。如果这样做,您可能会自己解决问题,因为您的数据实际上并不是您认为的那样。我敢打赌,您的“日期”列中的一个具有datetime
dtype,另一个具有object
dtype。