[英]multidimensional computation using pandas dataframe
我们目前使用 3 种不同的数据框来存储产品、性能和分类数据。 所有维度之间都保持外键关系。
我需要通过执行以下数学运算来更新性能中的成本列
performance['cost'] = performance['coulmn1']+sin(product['column3'])+2*Assortment['column2']
我需要对性能 dataframe 的每一行执行此操作。
请提出任何使计算更快的方法。 性能 dataframe 包含 100 万条记录。
我们可以使用任何其他方法而不是 dataframe 吗?
一种方法是预先计算整个列的 sin function。 我为此使用了 100 万条记录,这对我来说非常快。
import pandas as pd
import math
import numpy as np
product = pd.DataFrame(columns=['col3', 'sincol3'])
product['col3'] = np.random.randn(1000000)
s = pd.Series(product['col3'])
product['sincol3'] = np.sin(s)
performance = pd.DataFrame(columns=['col1', 'cost'])
performance['col1'] = np.random.randn(1000000)
assortments = pd.DataFrame(columns=['col2'])
assortments['col2'] = np.random.randn(1000000)
performance['cost'] = performance['col1']+ product['sincol3'] + 2*assortments['col2']
print(performance)
它为您提供 output ,例如:
col1 cost
0 0.194011 -1.940931
1 0.535375 1.891468
评论后编辑:您必须了解表达式本身不需要花费很多时间来计算。 如果表达式是您在运行时唯一要做的事情(假设您的数据框已经有值)。 让我们将一个示例与 50 次运行进行比较。
例子:
import pandas as pd
import math
import numpy as np
import time
def cal():
performance['cost'] = performance['col1']+ product['sincol3'] + 2*assortments['col2']
execution_time = []
product = pd.DataFrame(columns=['col3', 'sincol3'])
product['col3'] = np.random.randn(1000000)
s = pd.Series(product['col3'])
product['sincol3'] = np.sin(s)
performance = pd.DataFrame(columns=['col1', 'cost'])
performance['col1'] = np.random.randn(1000000)
assortments = pd.DataFrame(columns=['col2'])
assortments['col2'] = np.random.randn(1000000)
for i in range(0,50):
start_time = time.time()
cal()
execution_time.append(time.time() - start_time)
print('average time taken:\n')
print(np.mean(execution_time))
给我: average time taken: 0.15080997943878174
同时:
import pandas as pd
import math
import numpy as np
import time
def cal():
execution_time = []
product = pd.DataFrame(columns=['col3', 'sincol3'])
product['col3'] = np.random.randn(1000000)
s = pd.Series(product['col3'])
product['sincol3'] = np.sin(s)
performance = pd.DataFrame(columns=['col1', 'cost'])
performance['col1'] = np.random.randn(1000000)
assortments = pd.DataFrame(columns=['col2'])
assortments['col2'] = np.random.randn(1000000)
performance['cost'] = performance['col1']+ product['sincol3'] + 2*assortments['col2']
for i in range(0,50):
start_time = time.time()
cal()
execution_time.append(time.time() - start_time)
print('average time taken:\n')
print(np.mean(execution_time))
给我average time taken: 0.5624121456611447
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.