PySpark技术问询:不展开数组统计指定元素的出现次数
不使用explode统计数组列中指定元素的出现次数
输入数据
| Name | action |
|---|---|
| a | [walk,run,sit,walk,run,sit] |
| b | [walk,sit,run,walk,sleep,wait] |
需求
无需使用explode展开数组列,统计action列中walk和run的出现次数,生成包含统计结果的DataFrame。
目标输出
| Name | action | walk_count | run_count |
|---|---|---|---|
| a | [walk,run,sit,walk,run,sit] | 2 | 2 |
| b | [walk,sit,run,walk,sleep,wait] | 2 | 0 |
解决方案代码
import pandas as pd # 构造输入DataFrame df = pd.DataFrame({ 'Name': ['a', 'b'], 'action': [ ['walk','run','sit','walk','run','sit'], ['walk','sit','run','walk','sleep','wait'] ] }) # 直接对每个列表元素调用count方法统计次数 df['walk_count'] = df['action'].apply(lambda lst: lst.count('walk')) df['run_count'] = df['action'].apply(lambda lst: lst.count('run')) # 查看结果 print(df)
说明
通过apply方法遍历action列的每个列表,利用Python列表原生的count方法直接统计目标元素的出现次数,全程无需展开数组,高效完成统计需求。
内容的提问来源于stack exchange,提问作者pradeep nadarajan
相关产品推荐
相关产品推荐

