起始数据:
time value value_1 value-2 0 0 0 4 3 1 2 1 6 6
time value value_1 value-2 0 0 0 4 3 1 1 0 4 3 #duplicate of row 0 2 2 1 6 6 3 3 1 6 6 #duplicate of row 2
我想创建dfï1:
time value value_1 value-2 0 0 0 4 3 1 1 0.5 5 4.5 #average of row 0 and 2 2 2 1 6 6 3 3 2 8 8 #average of row 2 and 4
为此,我附加了一个起始数据帧的副本,以创建如上所示的中间数据帧:
df = df_0.append(df_0) df.sort_values(['time'], ascending=[True], inplace=True) df = df.reset_index() df['value_shift'] = df['value'].shift(-1) df['value_shift_1'] = df['value_1'].shift(-1) df['value_shift_2'] = df['value_2'].shift(-1)
然后我想对每一列应用一个函数:
def average_vals(numeric_val): #average every odd row if int(row.name) % 2 != 0: #take average of value and value_shift for each value #but this way I need to create 3 separate functions
用这种方法怎么样 DataFrame.reindex 和 DataFrame.interpolate
DataFrame.reindex
DataFrame.interpolate
df.reindex(np.arange(len(df.index) * 2) / 2).interpolate().reset_index(drop=True)
重新索引,半步 reindex(np.arange(len(df.index) * 2) / 2)
reindex(np.arange(len(df.index) * 2) / 2)
time value value_1 value-2 0.0 0.0 0.0 4.0 3.0 0.5 NaN NaN NaN NaN 1.0 2.0 1.0 6.0 6.0 1.5 NaN NaN NaN NaN
然后使用 数据帧.interpolate 填写 NaN
数据帧.interpolate
NaN
最后,使用 .reset_index(drop=True) 来修正你的索引。
.reset_index(drop=True)
应该给予
time value value_1 value-2 0 0.0 0.0 4.0 3.0 1 1.0 0.5 5.0 4.5 2 2.0 1.0 6.0 6.0 3 2.0 1.0 6.0 6.0