ValueError:只能在熊猫中比较标记相同的Series对象

时间:2018-11-12 13:10:25

标签: python pandas dataframe

我有两个这样的数据框。

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中的df2df1,并将它们分别与MainId进行比较。如果df1.Time isin df2(start and endtime)MainId有关,那么我想将df1到df2的info1info2列包括在内。如果没有值,那么我只想输入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(In 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 个答案:

答案 0 :(得分:0)

df1df2具有不同的Index(您可以通过检查df1.indexdf2.index来进行检查。因此,当您执行df2['MainId'] == df1['MainId'] ,您有2个无法比较的系列对象。

尝试使用左联接,类似:

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

应为您提供所需的数据框。然后,您可以使用它来执行比较。