Ahm*_*tin 5 python performance numpy dataframe pandas
给定一个动物列表,例如:
animals = ['cat', 'dog', 'hamster', 'dolphin']
Run Code Online (Sandbox Code Playgroud)
和熊猫数据框,df:
id animals
1 dog,cat
2 dog
3 cat,dolphin
4 cat,dog
5 hamster,dolphin
Run Code Online (Sandbox Code Playgroud)
我想获得一个新的数据框,显示每个动物的出现,例如:
animal ids
cat 1,3,4
dog 1,2,4
hamster 5
dolphin 3,5
Run Code Online (Sandbox Code Playgroud)
我知道我可以运行一个循环并准备它,但是我有超过 80,000 个单词的列表和超过 100 万行的数据框,因此使用循环来完成它需要很长时间。有没有更简单快捷的方法来使用数据框获得结果?
让我们试着get_dummies
再dot
df.animals.str.get_dummies(',').T.dot(df.id.astype(str)+',').str[:-1]
Out[307]:
cat 1,3,4
dog 1,2,4
dolphin 3,5
hamster 5
dtype: object
Run Code Online (Sandbox Code Playgroud)
如果将考虑列表添加 reindex
df.animals.str.get_dummies(',').T.dot(df.id.astype(str)+',').str[:-1].reindex(animals)
Out[308]:
cat 1,3,4
dog 1,2,4
hamster 5
dolphin 3,5
dtype: object
Run Code Online (Sandbox Code Playgroud)
使用str.split
,explode
和agg.join
df_final = (df.astype(str).assign(animals=df.animals.str.split(','))
.explode('animals').groupby('animals').id.agg(','.join)
.reset_index())
Out[155]:
animals id
0 cat 1,3,4
1 dog 1,2,4
2 dolphin 3,5
3 hamster 5
Run Code Online (Sandbox Code Playgroud)