【问题标题】:Python pivot with column values具有列值的 Python 数据透视
【发布时间】:2017-10-27 09:04:30
【问题描述】:

我是 python 新手,需要小支点函数的帮助

我有一张表格,上面的数据格式为

order_id    primary_dish    primary_cat dish_id order_date  average_adoption
927852        54438             1         54465   2016-12-11    37.5
927852        54438             1         54443   2016-12-11    37.5
927852        54453             1         54453   2016-12-11    25.61

使用 pandas,我使用 disc_id 旋转了上表,但我想用我无法做到的 average_adotion 列替换被列为 NAN 的值

目前得到如下输出

order_id primary_dish primary_cat   54438   54443   54453   54465
  927852      54438          1       NaN    1.0      1.0    1.0
  927852      54443          1        1.0   NaN      1.0    1.0
  927852      54453          1        1.0   1.0      NaN    1.0

枢轴功能

dish.pivot_table(index=['order_id', 'primary_dish', 'primary_cat'],
                 columns='dish_id',values=['average_adoption'], aggfunc='size'
                ).reset_index()

输出应该是这样的

order_id primary_dish primary_cat   54438   54443   54453   54465
  927852      54438          1       37.5   1.0      1.0    1.0
  927852      54443          1       1.0    25.61    1.0    1.0
  927852      54453          1       1.0    1.0      25.61  1.0

【问题讨论】:

    标签: python-3.x pandas pandas-groupby


    【解决方案1】:

    第一个枢轴,不要reset_index 用于以后对齐:

    df = dish.pivot_table(index=['order_id', 'primary_dish', 'primary_cat'],
                                   columns='dish_id',values=['average_adoption'], aggfunc='size')
    

    mean 使用与pivot_table 相同的索引创建系列:

    s = dish.groupby(['order_id','primary_dish','primary_cat'])['average_adoption'].mean()
    

    NaNs 替换为maskisnull

    print (df.mask(df.isnull(), s, axis=0).reset_index())
    dish_id  order_id  primary_dish  primary_cat  54443  54453  54465
    0          927852         54438            1   1.00   37.5   1.00
    1          927852         54453            1  25.61    1.0  25.61
    

    也应该可以工作(但对我来说不是熊猫0.20.3):

    print (df.fillna(s))
    

    【讨论】:

    • 感谢@jezrael,使用上述方法时,我不断收到“ValueError: cannot join with no level and no overlap names”错误
    • 数据肯定有问题,可以和数据共享代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多