python - 将 pandas 系列分配给 groupby 操作

标签 python pandas numpy dataframe group-by

这是我很久以来的问题!我在 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' object does not support item assignment

我对输出的期望是:

|---------------------|------------------|  
|      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 数据帧。

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

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

谢谢。

最佳答案

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

关于python - 将 pandas 系列分配给 groupby 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48175172/

相关文章:

Python twitter 函数用于列表

python - Anaconda:安装 Python 模块

python - 将字典列表的字典转换为数据框

python - 在应用引擎中,如何获取具有特定属性的实体的键?

python - 如何在已通过正则表达式过滤的 pandas DataFrame 上使用 .apply 函数?

Pandas 数据透视表选择具有最大值的行

python - NumPy 中的逐元素矩阵乘法

python - 如何从文件中读取两行并在 for 循环中创建动态键,后续

python - Scikit-learn χ²(卡方)统计量和相应的列联表

python - TensorFlow:组合两个图后从两个检查点恢复变量