将两个数据帧组合成y = mx + b结果的矢量化方法

时间:2019-12-23 05:42:14

标签: python python-3.x pandas

我有两个熊猫数据框。一个是来自典型m函数的by=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,但我不确定。

1 个答案:

答案 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