【问题标题】:categorical data to be dummified and aggregated分类数据被虚拟化和聚合
【发布时间】:2018-04-15 17:13:53
【问题描述】:

我有以下数据集,其中 X1 是完成测试的日期,X2 是具有 45 个级别的测试结果,x3 是测试名称

X1          X2   X3
20.04.2017  AA  1256(NB)
20.04.2017  AA  1257(NB)
20.04.2017  AA  1258(LM)
20.04.2017  LL  1257(NB)
23.07.2017  LL  1256(NB)
23.07.2017  LL  1258(LM)

我正在尝试将上述数据转换为

Date         X3        AA   LL
20.04.2017  1256(NB)    1   1
20.04.2017  1257(NB)    1   1
20.04.2017  1258(LM)    1   0
23.07.2017  1258(LM)    0   1

我能够使用“pd.get_dummies”为 AA 和 LL 创建虚拟列,但没有发生基于 X3 列的聚合。

【问题讨论】:

    标签: python pandas aggregation


    【解决方案1】:

    一种方法是使用get_dummies + sum

    df.set_index(['X1', 'X3']).X2\
          .str.get_dummies().sum(level=[0, 1]).reset_index()
    
               X1        X3  AA  LL
    0  20.04.2017  1256(NB)   1   0
    1  20.04.2017  1257(NB)   1   1
    2  20.04.2017  1258(LM)   1   0
    3  23.07.2017  1256(NB)   0   1
    4  23.07.2017  1258(LM)   0   1
    

    【讨论】:

    • 谢谢!! @COLDSPEED,但如果关卡数量增加到 45 个关卡,我需要写 (level =[0,1........,44]) ???
    • @Devesh 你可以传递一个范围:level=np.arange(45)
    • @COLDSPEED 感谢您的澄清...如果级别数未知怎么办?
    • @Devesh 查询 df.index 并计算层数并不难。
    • 我使用 df.set_index(['X1','X3']).['X2'].str.get_dummies 修复了它.....但是我得到另一个错误 raise AssertionError( 'Level %s not in index' % str(level)) AssertionError: Level [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45] 不在索引中
    猜你喜欢
    • 2018-05-20
    • 1970-01-01
    • 2023-04-03
    • 2020-10-14
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    相关资源
    最近更新 更多