代码之家  ›  专栏  ›  技术社区  ›  user96564

值错误:只能比较熊猫中标记相同的系列对象

  •  0
  • user96564  · 技术社区  · 7 年前

    我有两个这样的数据框。

    df1
    MainId,Time,info1,info2
    100,2018-07-12 08:05:00,a,b
    100,2018-07-12 08:07:00,x,y
    101,2018-07-14 16:00,c,d
    100,2018-07-14 19:30:00,d,e
    104,2018-07-14 03:30:00,g,h
    

    df2
    Id,MainId,startTime,endTime,value
    1,100,2018-07-12 08:00:00,2018-07-12 08:10:00,1001
    2,150,2018-07-14 10:05:00,2018-07-14 17:05:00,1002
    3,101,2018-07-12 0:05:00,2018-07-12 19:05:00,1003
    4,100,2018-07-12 08:05:00,2018-07-12 08:15:00,1004
    

    df2 是主数据帧和 df1 是子数据帧。我想查一下 starttime endtime 属于 DF2 随着时间的推移 DF1 与各自的 MainId . 如果 df1.Time isin df2(start and endtime) 与各自的 主要的 ,那么我想包括 info1 info2 DF1到DF2的列。如果没有值,那么我只想输入nan。

    我想要这样的输出

    Id,MainId,info1,info2,value
    1,100,a,b,1001
    1,100,x,y,1001
    2,150,nan,nan,1002
    3,101,nan,nan,1003
    4,100,a,b,1004
    4,100,x,y,1004
    

    这里我有两个相同的id(在id1中)和mainid在输出中,因为它们有不同的info1和info2,我想也包括那个。

    这就是我在熊猫馆做的事

    df2['info1'] = np.where((df2['MainId'] == df1['MainId'])& (df1['Time'].isin([df2['startTime'], df2['endTime']])),df1['info1'], np.nan)
    

    但这是一个错误

    ValueError: Can only compare identically-labeled Series objects
    

    我怎样才能纠正这个错误?有更好的办法吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Daniel Severo    7 年前

    df1 df2 有差别 Index (你可以检查一下 df1.index df2.index . 因此,当你这样做的时候 df2['MainId'] == df1['MainId'] ,则有两个系列对象不可比较。

    尝试使用左连接,例如:

    df3 = df2.join(df1.set_index('MainId'), on='MainId'))
    

    应该给你想要的数据帧。然后可以使用它来执行比较。