【问题标题】:How to filter a crosstab created in pandas by a specific column如何过滤特定列在熊猫中创建的交叉表
【发布时间】:2016-02-16 19:21:16
【问题描述】:

我在 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')

从以前的 sn-p 我有,但我无法让它工作。可能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 

【问题讨论】:

  • grouped_missing_analysis.loc(axis=0)[slice(None), ['Missing', 'Unknown', 'Other']] 有效吗?你能发布原始数据和代码来重现你的df
  • 是的!快速跟进,我现在如何汇总每个操作的 MissingUnknownOther 作为每个操作的总值计数,并以 All action_types 的百分比表示缺失、未知或其他的?
  • 抱歉,每个问题有 1 个问题,请发布一个新问题,通过 cmets 回答新要求会适得其反。
  • 是的。谢谢你。我会接受答案。

标签: python pandas group-by crosstab


【解决方案1】:

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

第一级可以传递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 提供了有关这种索引样式的更多详细信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-09
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 2023-02-02
    • 2020-01-24
    • 1970-01-01
    相关资源
    最近更新 更多