code: def calculate_2d_changes(explainer, new_observation, inds, diffs_1d):
      average_yhats = np.empty(inds.shape[0])
      average_yhats_norm = np.empty(inds.shape[0])
  
      for i in range(inds.shape[0]):
          current_data = deepcopy(explainer.data)
          current_data.iloc[:, inds.iloc[i, 0]] = new_observation.iloc[
              0, inds.iloc[i, 0]
          ]
          current_data.iloc[:, inds.iloc[i, 1]] = new_observation.iloc[
              0, inds.iloc[i, 1]
          ]
  
          yhats = explainer.predict(current_data)
          average_yhats[i] = yhats.mean()
          average_yhats_norm[i] = (
              average_yhats[i]
              - diffs_1d[inds.iloc[i, 0]]
              - diffs_1d.iloc[inds.iloc[i, 1]]
          )
  
      columns = explainer.data.columns
      average_yhats = pd.Series(average_yhats)
      average_yhats_norm = pd.Series(average_yhats_norm)
      average_yhats.index = [
          ":".join(pair)
          for pair in zip(
              columns[inds.iloc[:, 0]], columns[inds.iloc[:, 1]]
          )
      ]
      average_yhats_norm.index = [
          ":".join(pair)
          for pair in zip(
              columns[inds.iloc[:, 0]], columns[inds.iloc[:, 1]]
          )
      ]
  
      return average_yhats, average_yhats_norm
  
file_path: DALEX/python/dalex/dalex/predict_explanations/_break_down/utils.py
imports: from copy import deepcopy
  import numpy
  import pandas
label_desc: Use image node_id 3 for calling a global function with example usage: calculate_2d_changes(explainer, new_observation, inds, diffs_1d) and returns: average_yhats,  average_yhats_norm