ValueError: может сравнивать только идентичные объекты Series в пандах - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть два кадра данных, как это.

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) соответствует MainId, то я хочу включить столбцы 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 (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 голосов
/ 12 ноября 2018

df1 и df2 имеют различия Index (вы можете проверить это, проверив df1.index и df2.index. Следовательно, когда вы делаете df2['MainId'] == df1['MainId'], у вас есть 2 объекта серии, которые не сравнимы.

Попробуйте использовать левое объединение, например:

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

должно дать вам нужный кадр данных. Затем вы можете использовать его для выполнения сравнений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...