我有一个空的pandas数据框,其中包含基于datetimeIndex的预生成索引列。我还有另外两列高低。
我添加第三列和第四列,其值取决于前两列,即高和低
下面给出了代码段
header = ['high', 'low']
idx = pd.date_range("09:00", "18:00", freq="60min")
df = pd.DataFrame([],index=idx,columns=header)
df['mv'] = df['high'].ewm(span=3, min_periods=3,
adjust=False, ignore_na=False).mean()
df['sum'] = (df['high'] + df['low'])
df.index.name='date'
df.loc[('2018-03-30 09:00:00','high')] = 106
df.loc[('2018-03-30 09:00:00','low')] = 100
现在,如果我更新第一列和第二列的值,则第三列和第四列中的值将继续为NaN且不会更新。
如果高低列中的值发生变化,如何确保自动完成此操作?
def calculate_sum(row):
print row['high'], row['low']
return row['high'] + row['low']
df['sum'] = df.apply(calculate_sum, axis=1)
根据建议,我将df [' sum']行更改为由函数处理(上面的代码)
我发现当我分配df [' sum']
时,最初会调用该函数对任何行的df [' high']或df [' low']的任何后续更新都不会触发对该函数的回调。
答案 0 :(得分:0)
从您的代码中,我将定义一个返回数据框更新副本的函数
def update_df(tbl, dt, h,l):
df = tbl.copy()
df.loc[dt,['high','low']] = (h,l)
df['mv'] = df['high'].ewm(span=3, min_periods=3,
adjust=False, ignore_na=False).mean()
df['sum'] = (df['high'] + df['low'])
return df
您可以更新数据框:
df = update_df(df, '2018-03-30 12:00:00', 50,20)