我的数据格式接近df(如下所示)。我现在的问题是,我想用 avg_value 中的数据填充过去" days_back"的平均值。天。
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
所以,作为我的好男孩,我继续以下
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
但我仍然以同样的错误结束!我打赌这个问题有一个真正简单的解决方案,但我无法找到它:/非常感谢任何帮助!
答案 0 :(得分:1)
您真的很接近,需要在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