用2个常数乘以熊猫df,从而创建2个df

时间:2020-02-15 13:02:19

标签: python python-3.x pandas

我是熊猫的新手,目前拥有一个如下所示的df:

                  p1        p2        p3        p4
dates                                                 
2019-12-01  0.0000468  0.0000455    0.00004  0.0000323
2019-12-02  0.0000401  0.0000353  0.0000333  0.0000318

和另一个看起来像这样的df:

0    680.068
1    319.932
Name: constantValue, dtype: float64

对我来说,最快的方法是取第一个df,然后将其乘以每个常量,然后创建2个与第一个相同的df,但对每个元素乘以2的最快方法是什么?

就效率而言,我应该分成2个df还是引入某种MultiIndex?

常量数也可以更改,因此它可以返回3个常量,这将导致3 dfs,4个常量4 dfs等

任何建议都值得赞赏

2 个答案:

答案 0 :(得分:1)

好吧,因此您有一个DataFrame想要将其乘以一个不同Series的值(因为常量表看起来比DataFrame更像是熊猫Series)。

这里没有效率问题:

  • 迭代系列很快
  • 将DataFrame与标量值相乘很快(熊猫或numpy单词是 vectorizable ),只要列数据类型与带浮点数的乘法兼容。< / li>

这里,您只有(据我所能猜测的那样)浮点列和dates索引的DatatimeIndex不会受到影响。

恕我直言,最简单的方法是建立DataFrames列表。假设原始DataFrame为df,常量为Series constants

df_list = [df * val for val in constants]

答案 1 :(得分:0)

您可以遍历常量表 并创建一个动态数据框,然后将其与常量值相乘

在这里,我假设constant_df为包含常量的第二个数据帧 您遍历它,column_name是您要用来使其唯一的列

for constant_df in constant:
  multi[constant['column_name']] = df # to create unique dataframe
  multi[constant['column_name']].select_dtypes(exclude=['object', 'datetime']) * constant['constant_value_column']

我还没有尝试过此代码,所以如果发生任何错误,请告诉我

相关问题