我有一个包含旅程信息的数据框,另一个包含有关位置和区域的信息。
Origin Coordinates Time
0 Victoria x,y 15:32
1 Wembley x,y 14:00
2 Canary Wharf x,y 11:00
3 Stratford x,y 09:00
Station Zone
0 Victoria 1
1 Waterloo 1
2 Stratford 2
我想从第二个数据框中获取信息,并添加一个“原始区域”'列到第一个数据帧,带有适当的区域。
到目前为止,我已尝试过以下内容:
def getZone(Station):
return stations[stations.Station == Station]['Zone'].values[0]
df['OriginZone'] = getZone(df['Origin'])
ValueError:只能比较带有相同标签的Series对象
首先,为什么我会收到此错误?我怎样才能解决这个问题?
答案 0 :(得分:3)
我认为你期待merge
你的数据帧。如果您的第一个数据帧是df_1
,而您的第二个数据帧是df_2
,请尝试以下操作:
df_1.merge(df_2, left_on = 'Origin', right_on='Station', how='left').drop('Station', axis=1)
返回:
Origin Coordinates Time Zone
0 Victoria x,y 15:32 1.0
1 Wembley x,y 14:00 NaN
2 Canary Wharf x,y 11:00 NaN
3 Stratford x,y 09:00 2.0
请注意,NaN
存在,因为您Zone
中的df_2
数据丢失了{。}}。
解释:这会使用merge
,它会将df_1['Origin']
与df_2['Station']
匹配的两个数据帧组合在一起。我选择了how = 'left'
,这样就不会从丢失数据的左侧数据框(df_1
)中删除行,最后删除了额外的Station
列,这是您的目的不需要的
至于为什么你会收到这个错误,我认为你的代码试图做的一些事情是行不通的,但是突然出现的主要问题是你正在调用getZone
使用pd.Series
作为参数,因此它会尝试将您的stations
数据框(在您的示例中为长度为4)与您的df['Origin']
(长度为3)进行比较。即使长度和指数匹配,我也不确定这会达到你想要的效果。您可以使用循环和.loc
语句来执行此操作,但这会很笨拙。 merge
因这些原因而存在!