【问题标题】:can I run multiple DataFrames and apply a function to each list?我可以运行多个 DataFrame 并将一个函数应用于每个列表吗?
【发布时间】:2021-06-03 17:15:13
【问题描述】:

我有 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

感谢您的帮助

【问题讨论】:

    标签: python pandas dataframe data-science


    【解决方案1】:
    1. 将您的数据框 temp1、temp2 等和 temp1_t、temp2_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]
      

    顺便说一句,第 2 步中的news 可以设为generator expression,这样它就不会在内存中创建,并且项目只会在创建filtered 时创建和处理。

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

    【讨论】:

    猜你喜欢
    • 2015-07-12
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 2016-12-24
    • 2020-08-11
    • 1970-01-01
    相关资源
    最近更新 更多