将一个数据帧中的值转换为另一个数据帧

2024-09-30 14:39:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,其中包含行程信息,另一个包含位置和区域信息

     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

我想从第二个数据帧中获取信息,并在第一个数据帧中添加一个带有适当区域的“OriginZone”列

到目前为止,我尝试了以下方法:

def getZone(Station):
    return stations[stations.Station == Station]['Zone'].values[0]


df['OriginZone'] = getZone(df['Origin'])

ValueError:只能比较标签相同的系列对象

首先,为什么我会犯这个错误?我怎样才能避开这个问题呢


Tags: 数据信息区域zonedftimeoriginstation
1条回答
网友
1楼 · 发布于 2024-09-30 14:39:07

我想你正在寻找你的数据帧。如果第一个数据帧为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之所以存在,是因为这些电台的df_2中缺少Zone数据

解释:使用merge,它组合了两个数据帧,其中df_1['Origin']匹配df_2['Station']。我选择了how = 'left',这样它就不会从缺少数据的左侧数据帧(df_1)中删除行,最后,我删除了额外的Station列,这是您不需要的

至于为什么会出现这个错误,我认为代码试图做的一些事情是不起作用的,但我突然想到的主要问题是,您正在调用getZone,并使用pd.Series作为参数,因此,它试图将stations数据帧(在您的示例中,长度为4)与df['Origin'](长度为3)进行比较。即使长度和索引匹配,但是,我不确定这是否会达到您想要的。您可以使用循环和.loc语句来实现这一点,但这会很笨拙merge存在的原因如下

相关问题 更多 >