【问题标题】:Merge Pandas Dataframes on two columns [duplicate]在两列上合并 Pandas Dataframes [重复]
【发布时间】:2016-04-27 22:30:37
【问题描述】:

我有两个数据框正在尝试使用 pandas 进行合并。

lu_3
Site    SurveyDate  TripDate
003L    1990-09-28  1990-06-10
065r    2008-04-03  2008-03-28

data
Site    SurveyDate  
003L    1990-09-28  
065r    2008-04-03  

我正在尝试合并 lu_3 以使用 TripDate 填充 datadata 已被子集化以便于阅读,但包含的列比显示的要多。两个数据框都使用Site 作为索引。

我试过了:

tmp = data.merge(lu_3,left_index=True,right_index=True,how='left', on=['SurveyDate'])

但这会返回旅行日期的NaT

检查数据类型产生:

lu_3.dtypes
Out[111]: 
SurveyDate    datetime64[ns]
TripDate      datetime64[ns]
dtype: object

data.dtypes
Out[114]: 
SurveyDate        datetime64[ns]

编辑

我已重置 datalu_3 上的索引并尝试使用以下方式合并:

tmp = tmp_data.merge(lu_3,on=['Site','SurveyDate'], how='left').set_index('Site')

但我仍然在tmp 上为TripDate 收到NaT

【问题讨论】:

  • 检查两个数据框中SurveyDate 的日期类型以确保它们是一致的,例如。 Type(data.SurveryDate)
  • 他们都是pandas.core.series.Series
  • 对不起,Type(data.SurveryDate.iat[0]) 将获取系列中第一个元素的类型。
  • 两者都返回pandas.tslib.Timestamp
  • 它对我有用。您使用的是哪个版本的熊猫? 0.18.0 是最新的。

标签: python pandas dataframe merge


【解决方案1】:

我认为您不需要指定何时合并索引

tmp = data.merge(lu_3,left_index=True,right_index=True,how='left')

         SurveyDate_x SurveyDate_y    TripDate
Site                                      
003L   1990-09-28   1990-09-28  1990-06-10
065r   2008-04-03   2008-04-03  2008-03-28

【讨论】:

    猜你喜欢
    • 2018-05-16
    • 1970-01-01
    • 2018-06-25
    • 2019-08-27
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2021-02-22
    • 2020-09-09
    相关资源
    最近更新 更多