数字数组列转字符串:DataFrame映射选字典还是连接?
方案选择与实现
直接选字典映射就行,原因很简单——DF2只有20行,这种方式更简洁高效,逻辑也直观,没必要搞复杂的连接操作。
字典映射的具体实现
- 先把DF2转成
Id对应Teamname的字典:
team_dict = df2.set_index('Id')['Teamname'].to_dict()
- 给DF1新增
Teamnames列,把每个TeamId列表里的ID换成对应名称,再用逗号拼起来:
df1['Teamnames'] = df1['TeamId'].apply(lambda x: ','.join([team_dict[id] for id in x]))
跑这两行代码就能直接得到你要的结果DF。
用DataFrame连接的话(不推荐这个场景)
要是硬用连接,步骤会繁琐很多:得先把DF1里的TeamId列表拆成多行,和DF2关联后再重新分组拼接,具体步骤是:
- 把TeamId列表展开成单行一个ID:
df_exploded = df1.explode('TeamId')
- 和DF2做连接匹配:
df_merged = df_exploded.merge(df2, left_on='TeamId', right_on='Id', how='left')
- 按用户名和原TeamId列表分组,把Teamname用逗号拼起来:
df_result = df_merged.groupby(['Username', 'TeamId'])['Teamname'].apply(','.join).reset_index()
这种方法绕了好几个弯,对于只有20行的DF2来说完全没必要。
两者对比
- 字典映射:代码少、逻辑直接,不用改原数据结构,而且字典查找速度快,效率更高。
- DataFrame连接:步骤多、代码冗余,适合大型数据集或者复杂关联场景,但在这个小数据集场景下纯属画蛇添足。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

