我正在尝试将同一 DF 中 id 返回的所有 URL 字段合并到逗号分隔字段中。我不明白为什么我的分配不起作用而我的 for 循环是..
表格如下:
参考 | 选项1_参考 | 网址 |
---|---|---|
1 | 2,3,4 | /路径1 |
2 | 1,4,5 | /路径2 |
3 | 1 | /路径3 |
4 | 1,5 | /路径4 |
4 | 2,5 | /路径5 |
使用分配:
df=df.assign(options_url1=df.loc[df['Ref'].isin(df["Option1_Ref"].str.split(',')),['URL','Ref']].drop_duplicates('Ref')['URL'].str.join(','))
这只是返回一个空列。
for循环:
for x in df.index: df.loc[x,'options_url1']=','.join(df.loc[df['Ref'].isin(df.loc[x,"Option1_Ref"].split(',')),['URL','Ref']].drop_duplicates('Ref')['URL'].array)
这按预期工作
我期待着:
参考 | 选项1_参考 | 网址 | 选项_url1 |
---|---|---|---|
1 | 2,3,4 | /路径1 | /路径2,/路径3,/路径4 |
2 | 1,4,5 | /路径2 | /路径1,/路径4,/路径6 |
3 | 1 | /路径3 | /路径1 |
4 | 1,5 | /路径4 | /路径1,/路径6 |
4 | 2,5 | /路径5 | /路径2,/路径6 |
5 | 3,1 | /路径6 | /路径1,/路径3 |
用途:
s = df.drop_duplicates('Ref').astype({'Ref':str}).set_index('Ref')['URL']
df['options_url1'] = df["Option1_Ref"].str.split(',').explode().map(s).groupby(level=0).agg(','.join)
print (df)
Ref Option1_Ref URL options_url1
0 1 2,3,4 /path1 /path2,/path3,/path4
1 2 1,4,5 /path2 /path1,/path4,/path5
2 3 1 /path3 /path1
3 4 1,5 /path4 /path1,/path5
4 5 2,5 /path5 /path2,/path5