将两个数据框与相似的列值合并

时间:2018-07-11 16:49:52

标签: python pandas dataframe

我有两个df,一个比另一个长,但是它们都有一个包含相同值的列。

这是我的第一个叫天气的df:

        DATE    AWND    PRCP    SNOW    WT01    WT02    TAVG
 0  2017-01-01  5.59    0.00    0.0     NaN     NaN     46
 1  2017-01-02  9.17    0.21    0.0     1.0     NaN     40
 2  2017-01-03  10.74   0.58    0.0     1.0     NaN     42
 3  2017-01-04  8.05    0.00    0.0     1.0     NaN     47
 4  2017-01-05  7.83    0.00    0.0     NaN     NaN     34

这是我的第二个叫自行车的df:

    DATE    LENGTH      ID      AMOUNT  
 0  2017-01-01  3       1       5       
 1  2017-01-01  6       2       10  
 2  2017-01-02  9       3       100     
 3  2017-01-02  12      4       250 
 4  2017-01-03  15      5       45  

所以我想让我的df根据共享的DATE列从天气df的所有行中复制并复制过来。

  DATE    LENGTH      ID      AMOUNT  AWND   SNOW  TAVG
0  2017-01-01  3       1       5       5.59  0     46
1  2017-01-01  6       2       10      5.59  0     46
2  2017-01-02  9       3       100     9.17  0     40
3  2017-01-02  12      4       250     9.17  0     40
4  2017-01-03  15      5       45      10.74 0     42

请帮助!也许可以使用某种类型的联接。

3 个答案:

答案 0 :(得分:0)

使用merge

In [93]: bike.merge(weather[['DATE', 'AWND', 'SNOW', 'TAVG']], on='DATE')
Out[93]:
         DATE  LENGTH  ID  AMOUNT   AWND  SNOW  TAVG
0  2017-01-01       3   1       5   5.59   0.0    46
1  2017-01-01       6   2      10   5.59   0.0    46
2  2017-01-02       9   3     100   9.17   0.0    40
3  2017-01-02      12   4     250   9.17   0.0    40
4  2017-01-03      15   5      45  10.74   0.0    42

答案 1 :(得分:0)

只需使用相同的索引和简单的切片

df2 = df2.set_index('DATE')
df2[['SNOW', 'TAVG']] = df.set_index('DATE')[['SNOW', 'TAVG']]

答案 2 :(得分:0)

如果您查看pandas文档,它们将说明您可以在两个数据框之间执行的所有不同类型的“合并”(联接)。

合并的通用语法如下:pd.merge(weather, bike, on= 'DATE')

您还可以通过在我下面列出的合并函数中添加任何参数来使合并更加精美:(例如,指定是否要使用内部vs右连接)

以下是函数根据当前熊猫文档所采用的参数:

pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

Source

希望有帮助!

相关问题