[英]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.