如何合并两个具有不同长度和一个索引的DataFrame是另一个的子集,但它们的数据类型不同?

时间:2019-10-06 06:18:18

标签: python-3.x pandas dataframe

我需要合并这两个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           |
+-------------------------------------------------------+

1 个答案:

答案 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。