我可以运行多个DataFrames并对每个列表应用一个函数吗



我得到了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

我感谢的任何帮助

  1. 将数据帧temp1temp2等以及temp1_ttemp2_t放入单独的列表中。在最初创建数据帧时执行此操作,而不是在它们已经是单独的df之后。所以它们看起来像:

    temps = [temp1, temp2, ..., temp18]
    temp_ts = [temp1_t, temp2_t, ..., temp18_t]
    

    请注意,列表中的每个项目都是一个数据帧。

  2. 然后使用循环和zip()以及列表理解创建合并df的列表:

    news = [pd.merge(t, t_t, left_index=True, right_index=True)
    for (t, t_t) in zip(temps, temp_ts)]
    
  3. 然后用news:中的每个项目调用filter_outlier()函数

    filtered = [filter_outlier(df) for df in news]
    

    如果您想覆盖现有的合并df,那么将其分配回相同的列表news:

    news = [filter_outlier(df) for df in news]
    

Btw,步骤2中的news可以成为生成器表达式,这样它就不会在内存中创建,并且只有在创建filtered时才会创建和处理项。

在所有3个步骤中,您将使用索引或标准迭代访问列表中的数据帧。不需要为每个步骤创建18个变量。

最新更新