pandas-使用列表列作为键来创建额外的列

6tdlim6h  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(385)

我有一个数据框“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体内是否存在可以实现这一点的矢量化功能?

hfsqlsce

hfsqlsce1#

而不是使用你的 get_city 功能,爆炸你的 df2['teams'] 将子列表分为多行:

team_df = df2.explode(column='teams')

然后,在原始 Dataframe 中,我们称之为 df :

df['city'] = df['name'].map(team_df.set_index('teams')['city'])

这假定存在唯一的团队名称。如果没有,这就行不通了。如果是这样,我会尝试合并: df.merge(team_df[['teams', 'city']], left_on=$TEAM_NAME_COLUMN, right_on='teams', how='left') . 您可能需要进一步减价。

相关问题