如何使用python / pandas根据一列中的字符串拆分和复制行?

时间:2019-05-04 09:54:00

标签: python string pandas

我有一个df,其中某些值会像伪造的df一样添加到同一行:

    [['Apple, Kiwi, Clementine', np.nan , 'Cycling', 5], 
     ['Kiwi', 'Blue',  np.nan , 20], 
     ['Banana, Clementine',  np.nan , 'Hockey', 12], 
     ['Apple', 'Purple', 'Triathlon', 15], 
     ['Kiwi',  np.nan, 'Swimming', 8]]), 
                     columns=['fruit', 'colour', 'sport', 'wins'])

我想要的是复制带有多个水果的行,同时将第一个条目拆分为仅包含一个水果。 enter image description here 最后,我想绘制每个水果的平均获胜次数。因此,如果有一种分组的方式,则将提到的每个水果与正确的水果进行分组,这样说也可以。

我尝试了一些字符串操作,但随后将其简单拆分,并且其他列中的值不重复。 因为我知道如何在R中做到这一点,但它却是python的初学者,所以这非常令人沮丧。

1 个答案:

答案 0 :(得分:1)

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

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列。