【问题标题】:Pandas, groupby by 2 non numeric columns熊猫,按 2 个非数字列分组
【发布时间】:2021-07-09 21:34:07
【问题描述】:

我有一个包含几列的数据框,我只需要使用 2 个非数字列

1 是“hashed_id”,另一个是“事件名称”,有 10 个唯一名称 我正在尝试通过 2 个非数字列进行分组,因此聚合函数在这里不起作用

我的解决办法是:

df_events = df.groupby('subscription_hash', 'event_name')['event_name']
df_events = pd.DataFrame (df_events, columns = ["subscription_hash", 
'event_name'])

我正在尝试获取如下格式:

subscription_hash                                          event_name
                         
0   (0000379144f24717a8d124d798008a0e672)                       AddToQueue
1   (0000379144f24717a8d124d798008a0e672)                       page_view

而是得到:

  subscription_hash                                             event_name  

0   (0000379144f24717a8d124d798008a0e672)                       832433 AddToQueue 
1   (0000379144f24717a8d124d798008a0e672)                       245400 page_view

请指教

【问题讨论】:

    标签: python pandas string pandas-groupby


    【解决方案1】:

    你的数据干净吗?那些不受欢迎的数字是从哪里来的?

    在docs 中,我看到 groupby 通过提供列名称作为列表和聚合函数来使用:

    df.groupby(['col1','col2']).mean()

    由于您的值不是数字,请尝试pivot 方法:

    df.pivot(columns=['col1','col2'])

    所以我先尝试将 [] 放在你的 colnames 周围,然后尝试枢轴。

    【讨论】:

    • 我很确定它是干净的,不知道它来自哪里。以为我在 groupby 代码中犯了一些错误。你觉得对吗?
    • df_events = df.pivot(columns=['subscription_hash','event_name']) 得到这个错误:ValueError: Length mismatch: Expected 1791873 rows, received array of length 2
    • 嘿,您介意分享一下您的 df 是什么样子吗? df.head() 如果您只想拥有这 2 列并且没有聚合,那么 df_events = df[['col1','cols']]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 2018-07-19
    • 2020-02-19
    • 1970-01-01
    • 2018-09-30
    • 2016-06-04
    相关资源
    最近更新 更多