首页 文章

将pandas系列分配给groupby操作

提问于
浏览
0

经过很长时间这是我的问题!!我在StackOverflow上搜索了其他问答,但没有找到任何有用的答案 .

我有一个pandas DataFrame与列,如

|---------------------|------------------|  
|      date           |     Prediction   |  
|---------------------|------------------|  
|       2014-01-01    |         0.0      |  
|---------------------|------------------|  
|       2014-01-01    |         0.0      |  
|---------------------|------------------|  
|       2014-01-02    |         0.0      |  
|---------------------|------------------|  
|       2014-01-02    |         0.0      |  
|---------------------|------------------|

我想在 Prediction 列的单元格中设置值(使用 date 列上的groupby操作)而不是0.为此假设我的预测是具有两个值的数据帧 x

|---------------------|------------------|  
|      date           |       yhat       |  
|---------------------|------------------|  
|       2014-01-01    |         2.0      |  
|---------------------|------------------|  
|       2014-01-02    |         3.0      |  
|---------------------|------------------|

我正在尝试做如下 df.groupby('date', as_index=False)['Prediction'] = x['yhat']

但它给我一个错误:

TypeError:'DataFrameGroupBy'对象不支持项目分配

我对输出的期望是:

|---------------------|------------------|  
|      date           |     Prediction   |  
|---------------------|------------------|  
|       2014-01-01    |         2.0      |  
|---------------------|------------------|  
|       2014-01-01    |         2.0      |  
|---------------------|------------------|  
|       2014-01-02    |         3.0      |  
|---------------------|------------------|  
|       2014-01-02    |         3.0      |  
|---------------------|------------------|

由于分组操作基本上是两行数据帧,因此我期望它能够工作,因为 x 也是一个带有2个值的pandas数据帧 .

任何有关实现这一目标的建议都非常受欢

EDIT 我的数据框中有更多日期(比上面的示例所示) . 我只需要为特定日期(不是所有日期)填充预测列值 .

谢谢 .

1 回答

  • 1

    您可以使用 join() 操作执行此操作 . 例如:

    data = pd.DataFrame({'Prediction': [0, 0, 0, 0]},
                        index=['2014-01-01', '2014-01-01', '2014-01-02', '2014-01-02'])
    vals = pd.DataFrame({'yhat': [2, 3]}, index=['2014-01-01', '2014-01-02'])
    result = data.join(vals)
    result
    #             Prediction  yhat
    # 2014-01-01           0     2
    # 2014-01-01           0     2
    # 2014-01-02           0     3
    # 2014-01-02           0     3
    

    但是现在这些列并不完全是你原来的 Prediction 并重命名 yhat

    result.drop('Prediction', axis=1).rename({'yhat': 'Prediction'}, axis=1)
    #             Prediction
    # 2014-01-01           2
    # 2014-01-01           2
    # 2014-01-02           3
    # 2014-01-02           3
    

相关问题