Python 将df乘以2个常数,创建2个dfs
我刚接触熊猫,目前有一个df,看起来像这样:Python 将df乘以2个常数,创建2个dfs,python,python-3.x,pandas,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 0 680.0
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
0 680.068
1 319.932
Name: constantValue, dtype: float64
另一个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
0 680.068
1 319.932
Name: constantValue, dtype: float64
对于我来说,获取第一个df,将其乘以每个常数,并创建与第一个df相同形式的2个df,但将每个元素乘以的最快方法是什么
就效率而言,我应该分成两个dfs还是引入某种多索引
此外,常量数可能会更改,因此它可以返回3个常量,这将导致3个dfs,4个常量4个dfs等
任何建议都将不胜感激您可以在常数表中循环 并创建一个动态数据帧,然后将其乘以常量值 在这里,我假设常量_df是包含常量的第二个数据帧 循环遍历它,列_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']
我没有尝试过这段代码,因此如果发生任何错误,请告诉我好的,这样您就有了一个数据帧,您希望将其乘以不同系列的值(因为您的常量表看起来更像熊猫系列,而不是数据帧) 这里没有效率问题:
- 迭代一个序列很快
- 如果列数据类型与浮点乘法兼容,那么将数据帧与标量值相乘的速度很快(pandas或numpy字是可矢量化的)
日期的DatatimeIndex,这不会受到影响
IMHO最简单的方法是建立一个数据帧列表。假设原始数据帧为df,常数为系列常数:
df_list = [df * val for val in constants]
所以我应该在一个列表中有一个常数?那么这将为每次乘法输出一个数据帧列表?使用多索引而不是dfs列表是否有益?@Bob:否这将在每次乘法中输出一个数据帧。但是,在使用两个不同的变量来命名这两个新的数据帧时,我建议将这两个数据帧存储在一个列表中。这样,如果在常量表中添加第三行,则完全相同的代码将为您提供一个包含3个数据帧的列表。