经过很长时间这是我的问题!!我已经在StackOverflow上搜索了其他Q& A,但没有找到任何有用的答案。
我有一个带有
等列的pandas DataFrame|---------------------|------------------|
| date | Prediction |
|---------------------|------------------|
| 2014-01-01 | 0.0 |
|---------------------|------------------|
| 2014-01-01 | 0.0 |
|---------------------|------------------|
| 2014-01-02 | 0.0 |
|---------------------|------------------|
| 2014-01-02 | 0.0 |
|---------------------|------------------|
我想在date
列的单元格中设置值(使用Prediction
列上的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数据帧。
我们非常感谢您提供此任何建议。
修改 我的数据框中有更多日期(比上面的示例所示)。我只需要为特定日期(不是所有日期)填充预测列值。
感谢。
答案 0 :(得分: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