python - ValueError:只能比较熊猫中标记相同的系列对象
问题描述
我有两个这样的数据框。
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 到 df2的列。如果没有值,那么我只想输入 nan。df1
MainId
df1.Time isin df2(start and endtime)
MainId
info1
info2
我想要这样的输出
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
我该如何解决这个错误?有没有更好的办法 ?
解决方案
df1
并且df2
有不同Index
(您可以通过检查df1.index
和来检查这一点df2.index
。因此,当您这样做时df2['MainId'] == df1['MainId']
,您有 2 个不可比较的系列对象。
尝试使用左连接,例如:
df3 = df2.join(df1.set_index('MainId'), on='MainId'))
应该给你你想要的数据框。然后,您可以使用它来执行比较。
推荐阅读
- sas - 数据步骤中的宏变量
- angular - 在离线模式下运行 Angular6 应用程序
- botframework - Cortana Channel Integration to Bot 调用后进入浏览器
- java - java.lang.IllegalStateException: InputStream 已被读取 - 如果需要多次读取流,请不要使用 InputStreamResource
- javascript - onbeforeunload with window.open is not working
- ios - CloudKit 公共记录和未下载的更改
- sql-server - T-SQL - dynamic parameter in stored procedere
- firebase - Firebase webApp non-fatal error on server start: "functions: Preparing to emulate functions."
- c++ - 使用参数类型的值在尾随返回中需要 decltype
- .net-core - Modelling an existing database in .NET Core 2.x