我有一个数据框“df1”,列为“team_name”。我有一个不同的数据框架“df2”,有两列:“城市”作为字符串,“团队”作为列表。我想在df1中创建一个名为“team_city”的新列,通过在“teams”列中查找其列表包含“team_name”的行,可以在df2的“city”列中找到城市名称
(示例:如果“team_name”等于“denver”,我希望在df2中找到“teams”包含“denver”的行,然后提取该行中“team_city”的值。)
我目前正在df1中的“团队名称”列上应用一个函数,如下所示:
def get_city(name):
df2 = clean_cities()
for index, row in df2.iterrows():
if name in row['teams']:
return row['city']
我很好奇是否有更好的方法。Pandas体内是否存在可以实现这一点的矢量化功能?
1条答案
按热度按时间hfsqlsce1#
而不是使用你的
get_city
功能,爆炸你的df2['teams']
将子列表分为多行:然后,在原始 Dataframe 中,我们称之为
df
:这假定存在唯一的团队名称。如果没有,这就行不通了。如果是这样,我会尝试合并:
df.merge(team_df[['teams', 'city']], left_on=$TEAM_NAME_COLUMN, right_on='teams', how='left')
. 您可能需要进一步减价。