unique_id
(以及每个产品的几个条目)。我需要过滤每个产品的数据框架,执行一些计算,并更新基本数据框架。现在我正在做这样的事情:
for unique_id in self.df.unique_id.unique():
# prod_df = self.df[(self.df["unique_id"] == unique_id)]
prod_df = self.df.query(f"unique_id == {unique_id}")
some_function(prod_df)
def some_function(prod_df):
... some code ...
values = some_values
for idx, val in zip(prod_df.index, some_values):
self.df.loc[idx, "foo_column"] = val
然而,这段代码非常慢(我在这里讲了几个小时…)。我做了一些快速分析,似乎我的脚本的大部分运行时间都花在熊猫身上
indexing.py
脚本。没什么好惊讶的。
编辑:
下面是一个典型的函数,我可以用它代替
some_function
:
def comp_gradient_for_column(
self, prod_df: pd.DataFrame
) -> None:
"""
Compute the gradient for a given column and insert it in the dataframe
Arguments:
prod_df (pd.DataFrame): sub-dataframe to work on
Returns:
None:
"""
values = prod_df[column_name].values
gradients = np.gradient(values)
for idx, val in zip(prod_df.index, gradients):
self.df.loc[idx, "foo_column"] = val