繁体   English   中英

将大熊猫系列分配给groupby操作

[英]Assign a pandas series to a groupby operation

很久以后这是我的问题! 我在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个值的熊猫数据帧。

任何实现此目的的建议都将受到高度赞赏。

编辑我的数据框中有更多的日期(比上面的示例中显示)。 我只需要为特定日期(而不是所有日期)填充“预测”列值。

谢谢。

您可以使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM