我有一个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'])
我想要的是复制带有多个水果的行,同时将第一个条目拆分为仅包含一个水果。 最后,我想绘制每个水果的平均获胜次数。因此,如果有一种分组的方式,则将提到的每个水果与正确的水果进行分组,这样说也可以。
我尝试了一些字符串操作,但随后将其简单拆分,并且其他列中的值不重复。 因为我知道如何在R中做到这一点,但它却是python的初学者,所以这非常令人沮丧。
答案 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
列。