我有两个熊猫数据框。一个是来自典型m
函数的b
和y=mx+b
值的时间序列。另一个数据框(可以视为一个序列)是几个不同类别的x
值。 (是的,x
保持固定,并且线性参数在这种情况下会发生变化)
我想做的是生成一个新的数据帧,其中索引是formula_df.index
,列是staff.columns
,而值= mx+b
是通过乘以将staff_df添加到formula_df[m]
并添加formula[b]
。
作为一个具体示例,final_df.loc[pd.IndexSlice['20191204', 'matt']]
为:(22 * 0.90 + 10)
staff = {"mike": 18, "matt": 22, "dave": 25, "kanad": 15, 'elder':85}
staff_df = pd.DataFrame(data=staff, index = ['measurement'])
staff_df.index.name="evaluation"
the_data = {'m': [.5, .1, .3, .9, 1.2], 'b':[12, 14, 8, 10, 20]}
formula_df = pd.DataFrame(index=pd.date_range(start="20191201", periods=5, freq="d"),
data=the_data)
formula_df.index.name="Date"
即使只是试图使方程式的mx
部分失败。我试图做类似formula_df['m']*staff_df
的事情,但结果却很废话。我想,如果我更好地了解numpy
,那该怎么办,可惜我不知道。我怀疑这涉及到broadcasting
,但我不确定。
答案 0 :(得分:1)
根据构造函数按列和索引名创建final_df
DataFrame
,将第一列转换为numpy数组,然后将数据按DataFrame.mul
转换为多个,并按DataFrame.add
添加列: / p>
final_df = pd.DataFrame(data=[staff_df.iloc[0].to_numpy()],
index=formula_df.index,
columns=staff_df.columns)
final_df = final_df.mul(formula_df['m'], axis=0).add(formula_df['b'], axis=0)
print (final_df)
mike matt dave kanad elder
Date
2019-12-01 21.0 23.0 24.5 19.5 54.5
2019-12-02 15.8 16.2 16.5 15.5 22.5
2019-12-03 13.4 14.6 15.5 12.5 33.5
2019-12-04 26.2 29.8 32.5 23.5 86.5 <- 22 * 0.90 + 10 = 29.8
2019-12-05 41.6 46.4 50.0 38.0 122.0