iam*_*mdi 1 python dictionary dataframe pandas
我有一个数据框如下:
id fruits fastfoods
0 1110 banana|grapes|pine apple noodles|manchurian
1 1123 apple|orange|pine apple friedrice|manchurian
2 1245 apple|grapes noodles|fried rice
3 1710 banana|orange|pine apple noodles|manchurian
4 1109 banana|apple|pine apple manchurian
Run Code Online (Sandbox Code Playgroud)
我想按如下方式转换此数据框:
id banana grapes pineApple apple orange noodles manchurian friedRice
0 1110 yes yes yes no no yes yes no
1 1123 no no yes no no no yes yes
2 1245 no yes no yes no yes no yes
3 1710 yes no yes no yes yes yes no
4 1109 yes no yes yes no no yes no
Run Code Online (Sandbox Code Playgroud)
我尝试了一些方法,但没有任何效果。有任何想法吗?
Series.str.get_dummies与以下一起使用DataFrame.stack:
df1 = (df.set_index('id')
.stack()
.str.get_dummies()
.max(level=0)
.replace({0:'no', 1:'yes'})
.reset_index())
print (df1)
id apple banana fried rice friedrice grapes manchurian noodles orange \
0 1110 no yes no no yes yes yes no
1 1123 yes no no yes no yes no yes
2 1245 yes no yes no yes no yes no
3 1710 no yes no no no yes yes yes
4 1109 yes yes no no no yes no no
pine apple
0 yes
1 yes
2 no
3 yes
4 yes
Run Code Online (Sandbox Code Playgroud)
如果顺序很重要:
order = df.melt('id')['value'].str.split('|', expand=True).stack().unique()
print (order)
['banana' 'grapes' 'pine apple' 'apple' 'orange' 'noodles' 'manchurian'
'friedrice' 'fried rice']
df1 = (df.set_index('id')
.stack()
.str.get_dummies()
.max(level=0)
.replace({0:'no', 1:'yes'})
.reindex(order, axis=1)
.reset_index()
)
print (df1)
id banana grapes pine apple apple orange noodles manchurian friedrice \
0 1110 yes yes yes no no yes yes no
1 1123 no no yes yes yes no yes yes
2 1245 no yes no yes no yes no no
3 1710 yes no yes no yes yes yes no
4 1109 yes no yes yes no no yes no
fried rice
0 no
1 no
2 yes
3 no
4 no
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |