python - 如何按特定列过滤在 Pandas 中创建的交叉表

标签 python pandas group-by crosstab

我使用以下方法在 pandas 中创建了一个交叉表:

grouped_missing_analysis = pd.crosstab(clean_sessions.action_type, clean_sessions.action, margins=True).unstack()    
print(grouped_missing_analysis[:20])

导致显示:

action  action_type     
10      Missing                0
        Unknown                0
        booking_request        0
        booking_response       0
        click                  0
        data                   0
        message_post        3215
        modify                 0
        partner_callback       0
        submit                 0
        view                   0
        All                 3215
11      Missing                0
        Unknown                0
        booking_request        0
        booking_response       0
        click                  0
        data                   0
        message_post         716
        modify                 0
dtype: int64

我只想显示“未知”、“缺失”或“其他”的 action_type,并忽略每个操作的其他 action_type。我觉得答案与以下内容有关:

.where(clean_sessions.action_type.isin(('Missing', 'Unknown')), 'Other')

从我之前的片段中,但我无法让它工作。也许 pivot_table 更简单,这个练习只是让我学习如何使用不同的函数在 python 中进行数据分析。

clean_sessions 的原始数据如下所示:

   user_id          action action_type            action_detail  \
0  d1mm9tcy42          lookup     Missing                  Missing   
1  d1mm9tcy42  search_results       click      view_search_results   
2  d1mm9tcy42          lookup     Missing                  Missing   
3  d1mm9tcy42  search_results       click      view_search_results   
4  d1mm9tcy42          lookup     Missing                  Missing   
5  d1mm9tcy42  search_results       click      view_search_results   
6  d1mm9tcy42          lookup     Missing                  Missing   
7  d1mm9tcy42     personalize        data  wishlist_content_update   
8  d1mm9tcy42           index        view      view_search_results   
9  d1mm9tcy42          lookup     Missing                  Missing   

       device_type secs_elapsed  
0  Windows Desktop          319  
1  Windows Desktop        67753  
2  Windows Desktop          301  
3  Windows Desktop        22141  
4  Windows Desktop          435  
5  Windows Desktop         7703  
6  Windows Desktop          115  
7  Windows Desktop          831  
8  Windows Desktop        20842  
9  Windows Desktop          683 

最佳答案

这些是您的索引而不是列,您需要传递标签来选择感兴趣的行。

您可以为第一层传递 slice(None),然后为第二层传递一个列表:

In [102]:
grouped_missing_analysis.loc[slice(None), ['Missing', 'Unknown', 'Other']]

Out[102]:
action          action_type
index           Missing        0
lookup          Missing        5
personalize     Missing        0
search_results  Missing        0
All             Missing        5
dtype: int64

docs提供有关这种索引方式的更多详细信息

关于python - 如何按特定列过滤在 Pandas 中创建的交叉表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35430279/

相关文章:

python - Slack Bot - Python slack 发送 markdown 消息

python - 在 makefile 中设置环境变量并从 python 脚本中读取它不起作用

python - Pandas:列对象不可调用

python - 带有 MultiIndex : exclude level values 的 Pandas 数据框

python - 如果单行的条件为真,则标记整个组

mysql - 从 MySql 中的列中选择不同的值

python - 连接到上游时,Docker 中的 NGINX 和 Gunicorn 中的权限错误 : connect() to unix:/tmp/gunicorn. sock 失败(13:权限被拒绝)

pandas - 将一行总计添加到数据框

MySQL查询以获取最新更新页面的列表,但每个slug只有一个结果?

Python-是否可以一次打开多个 Chrome 网页?