我可以 运行 多个 DataFrame 并对每个列表应用一个函数吗?
can I run multiple DataFrames and apply a function to each list?
我得到了 18 个合并列表
tempNew_1 = pd.merge(temp1, temp1_t, left_index=True, right_index=True)
tempNew_2 = pd.merge(temp2, temp2_t, left_index=True, right_index=True)
tempNew_3 = pd.merge(temp3, temp3_t, left_index=True, right_index=True)
tempNew_4 = pd.merge(temp4, temp4_t, left_index=True, right_index=True)
tempNew_5 = pd.merge(temp5, temp5_t, left_index=True, right_index=True)
tempNew_6 = pd.merge(temp6, temp6_t, left_index=True, right_index=True)
tempNew_7 = pd.merge(temp7, temp7_t, left_index=True, right_index=True)
tempNew_8 = pd.merge(temp8, temp8_t, left_index=True, right_index=True)
tempNew_9 = pd.merge(temp9, temp9_t, left_index=True, right_index=True)
tempNew_10 = pd.merge(temp10, temp10_t, left_index=True, right_index=True)
tempNew_11 = pd.merge(temp11, temp11_t, left_index=True, right_index=True)
tempNew_12 = pd.merge(temp12, temp12_t, left_index=True, right_index=True)
tempNew_13 = pd.merge(temp13, temp13_t, left_index=True, right_index=True)
tempNew_14 = pd.merge(temp14, temp14_t, left_index=True, right_index=True)
tempNew_15 = pd.merge(temp15, temp15_t, left_index=True, right_index=True)
tempNew_16 = pd.merge(temp16, temp16_t, left_index=True, right_index=True)
tempNew_17 = pd.merge(temp17, temp17_t, left_index=True, right_index=True)
tempNew_18 = pd.merge(temp18, temp18_t, left_index=True, right_index=True)
是否可以将此函数应用于任何 DataFrame 并覆盖它们?
def filter_outlier(x):
### FILTER DATA ###
# folgend wird ein numpyarray erstellt das den z-Score jedes Wertes in temp1
z_scores_x = stats.zscore(x)
abs_x = np.abs(z_scores_x)
filtered_x = (abs_x < 3)
new_y = x[filtered_x]
return new_y
我很感激任何帮助
将您的数据帧 temp1
、temp2
等和 temp1_t
、temp2_t
放入单独的列表中。在您最初创建数据帧时执行此操作,而不是在它们已经是单独的 df 之后执行此操作。所以它们看起来像:
temps = [temp1, temp2, ..., temp18]
temp_ts = [temp1_t, temp2_t, ..., temp18_t]
请注意,列表中的每一项都是一个数据框。
然后使用循环和 zip()
以及列表理解创建合并的 df 列表:
news = [pd.merge(t, t_t, left_index=True, right_index=True)
for (t, t_t) in zip(temps, temp_ts)]
然后用 news
中的每个项目调用 filter_outlier()
函数:
filtered = [filter_outlier(df) for df in news]
如果你想覆盖现有的合并 df,然后将它分配回同一个列表 news
:
news = [filter_outlier(df) for df in news]
顺便说一句,步骤 2 中的 news
可以设为 generator expression,这样它就不会在内存中创建,并且项目仅在创建 filtered
.[=26 时创建和处理=]
在所有 3 个步骤中,您将使用索引或标准迭代访问列表中的数据帧。无需为每个步骤创建 18 个变量。
我得到了 18 个合并列表
tempNew_1 = pd.merge(temp1, temp1_t, left_index=True, right_index=True)
tempNew_2 = pd.merge(temp2, temp2_t, left_index=True, right_index=True)
tempNew_3 = pd.merge(temp3, temp3_t, left_index=True, right_index=True)
tempNew_4 = pd.merge(temp4, temp4_t, left_index=True, right_index=True)
tempNew_5 = pd.merge(temp5, temp5_t, left_index=True, right_index=True)
tempNew_6 = pd.merge(temp6, temp6_t, left_index=True, right_index=True)
tempNew_7 = pd.merge(temp7, temp7_t, left_index=True, right_index=True)
tempNew_8 = pd.merge(temp8, temp8_t, left_index=True, right_index=True)
tempNew_9 = pd.merge(temp9, temp9_t, left_index=True, right_index=True)
tempNew_10 = pd.merge(temp10, temp10_t, left_index=True, right_index=True)
tempNew_11 = pd.merge(temp11, temp11_t, left_index=True, right_index=True)
tempNew_12 = pd.merge(temp12, temp12_t, left_index=True, right_index=True)
tempNew_13 = pd.merge(temp13, temp13_t, left_index=True, right_index=True)
tempNew_14 = pd.merge(temp14, temp14_t, left_index=True, right_index=True)
tempNew_15 = pd.merge(temp15, temp15_t, left_index=True, right_index=True)
tempNew_16 = pd.merge(temp16, temp16_t, left_index=True, right_index=True)
tempNew_17 = pd.merge(temp17, temp17_t, left_index=True, right_index=True)
tempNew_18 = pd.merge(temp18, temp18_t, left_index=True, right_index=True)
是否可以将此函数应用于任何 DataFrame 并覆盖它们?
def filter_outlier(x):
### FILTER DATA ###
# folgend wird ein numpyarray erstellt das den z-Score jedes Wertes in temp1
z_scores_x = stats.zscore(x)
abs_x = np.abs(z_scores_x)
filtered_x = (abs_x < 3)
new_y = x[filtered_x]
return new_y
我很感激任何帮助
将您的数据帧
temp1
、temp2
等和temp1_t
、temp2_t
放入单独的列表中。在您最初创建数据帧时执行此操作,而不是在它们已经是单独的 df 之后执行此操作。所以它们看起来像:temps = [temp1, temp2, ..., temp18] temp_ts = [temp1_t, temp2_t, ..., temp18_t]
请注意,列表中的每一项都是一个数据框。
然后使用循环和
zip()
以及列表理解创建合并的 df 列表:news = [pd.merge(t, t_t, left_index=True, right_index=True) for (t, t_t) in zip(temps, temp_ts)]
然后用
news
中的每个项目调用filter_outlier()
函数:filtered = [filter_outlier(df) for df in news]
如果你想覆盖现有的合并 df,然后将它分配回同一个列表
news
:news = [filter_outlier(df) for df in news]
顺便说一句,步骤 2 中的 news
可以设为 generator expression,这样它就不会在内存中创建,并且项目仅在创建 filtered
.[=26 时创建和处理=]
在所有 3 个步骤中,您将使用索引或标准迭代访问列表中的数据帧。无需为每个步骤创建 18 个变量。