将两个具有相似列值的数据帧合并在一起

2024-04-19 17:07:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个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根据shareddate列复制weather 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

请帮帮我!也许可以使用某种类型的连接。你知道吗


Tags: iddfdate自行车nanamountlength天气
3条回答

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

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

使用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

如果您查看pandas文档,它们会解释您可以在两个数据帧之间执行的所有不同类型的“合并”(join)。你知道吗

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

您还可以通过将下面列出的任何参数添加到merge函数中,使合并更为奇特:(例如,指定是否需要内部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

希望有帮助!你知道吗

相关问题 更多 >