使用熊猫获取事件列表

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 万行的数据框,因此使用循环来完成它需要很长时间。有没有更简单快捷的方法来使用数据框获得结果?

WeN*_*Ben 5

让我们试着get_dummiesdot

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)


And*_* L. 3

使用str.split,explodeagg.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)