簡體   English   中英

如何將 dataframe 普通列與 pandas 中的設置列組合?

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

有一個 dataframe df

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

需要將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

謝謝!

使用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

或者使用Series.str.cat

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

如果需要為com_item中的去重值創建第一組,則可以添加值item以在列表理解中加入設置:

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

查看解決方案差異的示例數據:

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  

如果你想要 nxt_item 作為列表:

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

output:

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

如果你想要一個字符串:

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

output:

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

使用pandas.Series.strip

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

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