我的数据格式接近 df 的格式(如下所示)。我现在的问题是我想用过去“days_back”天的平均值填充 avg_value 中的数据。

import numpy as np
import pandas as pd

df = pd.DataFrame({ 'DAY': np.append(np.ones(24),
                                 [np.multiply(np.ones(24), 2),
                                  np.multiply(np.ones(24), 3),
                                  np.multiply(np.ones(24), 4)]),
                'value': np.random.randn(1, 24*4)[0],
                'avg_value': 0.},
                index=pd.date_range('20150101', periods=24*4, freq="H"))

print(df.tail())
                     DAY  avg_value     value
2015-01-04 19:00:00  4.0        0.0  0.685153
2015-01-04 20:00:00  4.0        0.0  0.670713
2015-01-04 21:00:00  4.0        0.0 -0.519541
2015-01-04 22:00:00  4.0        0.0  0.795619
2015-01-04 23:00:00  4.0        0.0 -0.150966

来自R,这将是一件容易的事情..
但是当我尝试做
df.loc[df["DAY"] == the_day_I_want].avg_value = my_numpy_array

我得到
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

所以,作为一个好 child ,我继续以下
index_row = df.loc[df["DAY"] == the_day_I_want].index
index_col = df.columns.get_loc("avg_value")
df.loc[index_row, index_col] = my_numpy_array

但我仍然以同样的错误告终!我敢打赌这个问题有一个真正简单的解决方案,但我找不到它:/任何帮助将不胜感激!

最佳答案

你真的很接近,需要在 loc 中指定列:

df.loc[df["DAY"] == the_day_I_want].avg_value = my_numpy_array

什么是相同的:
df.loc[df["DAY"] == the_day_I_want]['avg_value'] = my_numpy_array

改成:
df.loc[df["DAY"] == the_day_I_want, 'avg_value'] = my_numpy_array

为什么需要它更好地解释 returning a view versus a copy

关于python - 使用 Numpy 数组更新 Pandas 数据框中的部分列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44774110/

10-12 21:46
查看更多