分享
三行代码  ›  专栏  ›  技术社区  ›  Mactilda

如何使用python/pandas在一列中根据字符串拆分和复制行? - How to split and duplicate rows according to string in one column with python / pandas?

  •  0
  • Mactilda  · 技术社区  · 3 月前

    我有一个df,其中一些值被添加到同一行,就像这个伪df:

    [['apple,kiwi,clementine',np.nan,'cycling',5],
    [新西兰语','蓝色',NP.NAN,20],
    [香蕉,克莱门汀',NP.NAN,'曲棍球',12],
    [苹果],“紫色”,“铁人三项”,15],
    [新西兰语],NP.NAN,“游泳”,8]],
    columns=['fruit'、'colour'、'sport'、'wins'])
    < /代码> 
    
    

    我想要的是用多个水果复制行,同时拆分第一个条目只包含一个水果。 最后,我想画出每个水果的平均收益。因此,如果有一种分组方法,其中提到的每一个水果都是用正确的水果分组的,那么这也会起作用。

    我尝试了一些字符串操作,但随后它被简单地拆分,其他列中的值不重复。 这非常令人沮丧,因为我知道如何在R中完成它,但我是Python的初学者。

    我想要的是用多个水果复制行,同时拆分第一个条目只包含一个水果。 enter image description here 最后,我想画出每个水果的平均收益。因此,如果有一种分组方法,其中提到的每一个水果都是用正确的水果分组的,那么这也会起作用。

    我尝试了一些字符串操作,但随后它被简单地拆分,其他列中的值不重复。 这非常令人沮丧,因为我知道如何在R中完成它,但是我是一个Python初学者。

    1 回复  |  直到 3 月前
        1
  •  1
  •   anky_91    3 月前

    使用@Wen Ben的解决方案 here :

    s=pd.DataFrame([[x] + [z] for x, y in zip(df.index,df.fruit.str.split(',')) for z in y],
                   columns=[0,'Fruit'])
    df_new=s.merge(df,left_on=0,right_index=True).drop(0,1)
    print(df_new)
    

             Fruit                    fruit  colour      sport  wins
    0        Apple  Apple, Kiwi, Clementine     NaN    Cycling     5
    1         Kiwi  Apple, Kiwi, Clementine     NaN    Cycling     5
    2   Clementine  Apple, Kiwi, Clementine     NaN    Cycling     5
    3         Kiwi                     Kiwi    Blue        NaN    20
    4       Banana       Banana, Clementine     NaN     Hockey    12
    5   Clementine       Banana, Clementine     NaN     Hockey    12
    6        Apple                    Apple  Purple  Triathlon    15
    7         Kiwi                     Kiwi     NaN   Swimming     8
    

    注释 你可以选择放弃 fruit 列(如果需要)。