python - 改进以逗号分隔和爆炸字符串列,并在 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
解决方案
用于.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
推荐阅读
- jboss - 无法从 JBOSS 访问 CMS
- php - 从字符串中删除单引号和双引号
- oauth - 获取 Bearer 令牌后无法发出获取请求 - 401 错误“范围不足”
- rabbitmq - RabbitMQ Shovel 连接失败
- php - 从字符串 php wordpress 获取 ID
- c# - webapi 参数为空
- dialogflow-es - 如何在 dialogflow v2 api 中从内联编辑器设置 outputContext
- ios - 快速嵌套重复循环
- angular - 绑定没有路由器链接以显示 id 的 Angular 6
- hyperledger-fabric - 访问被拒绝:频道 [mychannel] 创建者组织 [Org2MSP]