pandas 将多行条件组合到逗号分隔列中

问题描述 投票:0回答:1

我正在尝试将同一 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
python pandas dataframe assign
1个回答
0
投票

用途:

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
© www.soinside.com 2019 - 2024. All rights reserved.