简体   繁体   English

如何将 dataframe 普通列与 pandas 中的设置列组合?

[英]How to combine a dataframe normal column with set column in pandas?

have got a dataframe df有一个 dataframe df

item        Space   rem_spc     nxt_item
Pineapple   0.5     0.5         {Mango, Grape}

need to combine df['item'] and df['nxt_item'] into single column df['com_item'] as given below需要将df['item']df['nxt_item']组合成单列df['com_item']如下所示

item        Space   rem_spc     nxt_item        com_item
Pineapple   0.5     0.5         {Mango, Grape}  Pineapple,Mango,Grape

Thanks!谢谢!

Use Series.str.join for set columns and add item values:使用Series.str.join设置列并添加item值:

df['com_item'] = df['item'] + ',' + df['nxt_item'].str.join(',')
print (df)
        item  Space  rem_spc        nxt_item               com_item
0  Pineapple    0.5      0.5  {Grape, Mango}  Pineapple,Grape,Mango

Or use Series.str.cat :或者使用Series.str.cat

df['com_item'] = df['item'].str.cat( df['nxt_item'].str.join(','), sep=',')

If need create first sets for deduplicated values in com_item is possible add value item to set with join in list comprehension:如果需要为com_item中的去重值创建第一组,则可以添加值item以在列表理解中加入设置:

df['com_item'] = [','.join(b.union({a})) for a, b in zip(df['item'],df['nxt_item'])]

Sample data for see difference of solutions:查看解决方案差异的示例数据:

print (df)
        item  Space  rem_spc           nxt_item
0  Pineapple    0.5      0.5  {'Mango','Grape'}
1      Mango    0.5      0.5  {'Mango','Grape'}

df['nxt_item'] = df['nxt_item'].apply(ast.literal_eval)

df['com_item1'] = [','.join(b.union({a})) for a, b in zip(df['item'],df['nxt_item'])]
df['com_item2'] = df['item'] + ',' + df['nxt_item'].str.join(',')

print (df)
        item  Space  rem_spc        nxt_item              com_item1  \
0  Pineapple    0.5      0.5  {Grape, Mango}  Grape,Mango,Pineapple   
1      Mango    0.5      0.5  {Grape, Mango}            Grape,Mango   

               com_item2  
0  Pineapple,Grape,Mango  
1      Mango,Grape,Mango  

if you want nxt_item as a list:如果你想要 nxt_item 作为列表:

df['com_item'] = df.apply(lambda row: list(row['nxt_item']) + [row['item']] ,axis=1)

output: output:

        item  Space  rem_spc        nxt_item                   com_item
0  pineapple    0.5      0.5  {Grape, Mango}  [Grape, Mango, pineapple]

if you want as a string:如果你想要一个字符串:

df['com_item'] = df.apply(lambda row: ' '.join(list(row['nxt_item']) + [row['item']] ),axis=1)

output: output:

        item  Space  rem_spc        nxt_item               com_item
0  pineapple    0.5      0.5  {Grape, Mango}  Grape Mango pineapple

With pandas.Series.strip :使用pandas.Series.strip

df["com_item"] = df["item"] + "," + df["nxt_item"].astype(str).str.strip("{}")

Output: Output:

print(df)

        item  Space  rem_spc        nxt_item                 com_item
0  Pineapple    0.5      0.5  {Mango, Grape}  Pineapple, Mango, Grape

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM