首页 > 解决方案 > 改进以逗号分隔和爆炸字符串列,并在 Pandas 中将其从长旋转到宽

问题描述

我想知道是否有更好的方法可以通过“逗号”将字符串列拆分为多行并将列从长发送到宽。我目前的方法只是在一定程度上起作用。

data = {'id':["ab3e3", "psdds2", "pas13", "ccdf2", "dsda1"],
        'fruit':["apple, organge", "others", "dragon fruit, organge", "watermelon", "others"]}

df = pd.DataFrame(data)

lst_col = 'fruit'
x = df.assign(**{lst_col:df[lst_col].str.split(',')})
dt = x.explode('fruit')
dt['counts'] = 1
dt.pivot(index='id', columns='fruit', values = 'counts')

       id                  fruit
0   ab3e3         apple, organge
1  psdds2                 others
2   pas13  dragon fruit, organge
3   ccdf2             watermelon
4   dsda1                 others

预期输出:

id        organge  apple  dragon fruit  others  watermelon
ab3e3         1      1             0       0           0 
ccdf2         0      0             0       0           1
dsda1         0      0             0       1           0 
pas13         1      0             1       0           0 
psdds2        0      0             0       1           0 

标签: pythonpandas

解决方案


用于.str.get_dummies()fruit列中获取虚拟表。然后,用这个虚拟表,如下:join df

df.drop('fruit', axis=1).join(df['fruit'].str.get_dummies(', '))

结果:

       id  apple  dragon fruit  organge  others  watermelon
0   ab3e3      1             0        1       0           0
1  psdds2      0             0        0       1           0
2   pas13      0             1        1       0           0
3   ccdf2      0             0        0       0           1
4   dsda1      0             0        0       1           0

推荐阅读