将两个具有相似列值的数据框合并在一起[重复]

Posted

技术标签:

【中文标题】将两个具有相似列值的数据框合并在一起[重复]【英文标题】:merging two dataframes together with similar column values [duplicate] 【发布时间】:2018-12-19 19:12:44 【问题描述】:

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

这是我的第一个 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

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

【问题讨论】:

bike.merge(weather) ? 【参考方案1】:

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

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

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

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

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

希望对你有帮助!

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

使用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 中的公共列值合并两个数据框

合并两个共享相同列值的数据框

Pandas:合并具有不同索引和缺失值的两个数据框

按列值将数据框拆分为两个[重复]

GraphFrames:合并具有相似列值的边缘节点