【问题标题】:Comparing id date combinations in Pandas比较 Pandas 中的 id 日期组合
【发布时间】:2020-09-14 07:36:29
【问题描述】:

我是 Pandas 的初学者,想知道如何比较一个数据帧中的行对组合与另一个数据帧。

我有 df:

    id  dates
0   A   2000-01-01
1   B   2000-01-02
2   C   2000-01-03

并想将其与 df2 进行比较:

    id  dates
0   A   2000-01-01
1   B   2000-01-03
2   C   2000-01-01
3   D   2000-01-04
4   E   2000-01-05

对于 df2 中的每个特定 id,它会将相应的日期与 df1 进行比较(并告诉我 df1 中的日期是打开还是晚于 df2 中的日期)

所以我应该得到:

    id  dates       later
0   A   2000-01-01  1
1   B   2000-01-02  0
2   C   2000-01-03  1

有什么好的方法来思考这个问题?

谢谢!

【问题讨论】:

    标签: python-3.x pandas dataframe compare


    【解决方案1】:

    方法一:可以使用Series.map根据id将日期从df2映射到df1,然后使用Series.ge比较对应的日期: p>

    df1['later'] = df1['dates'].ge(df1['id'].map(df2.set_index('id')['dates'])).view('i1')
    

    方法二: 将数据框df1df2 合并,然后使用Series.ge 比较对应的日期:

    df = df1.merge(df2, on='id', suffixes=['', '_r'], how='left')
    df['later'] = df['dates'].ge(df.pop('dates_r')).view('i1')
    

      id      dates  later
    0  A 2000-01-01      1
    1  B 2000-01-02      0
    2  C 2000-01-03      1
    

    【讨论】:

      【解决方案2】:

      您可以在id 上使用pd.merge() 来比较dates 列,并通过传递axis=1 获取两个date 列中的max。这将返回TrueFalse。然后你可以通过astype(int)TrueFalse分别更改为10

      df['later'] = (df['dates'] == pd.merge(df,df2,on='id')[['dates_x','dates_y']].max(axis=1)).astype(int)
      df
      
          id       dates  later
      0   A   2000-01-01      1
      1   B   2000-01-02      0
      2   C   2000-01-03      1
      

      【讨论】:

      • @ShubhamSharma 感谢您引起我的注意。我已经编辑了我的答案。
      猜你喜欢
      • 2020-08-20
      • 2020-02-25
      • 1970-01-01
      • 2021-01-23
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 2023-01-02
      • 2017-10-25
      相关资源
      最近更新 更多