我的循环非常慢,可以使用一些帮助。我有一个熊猫行的DataFrame,我需要每一行之间的卡方距离。我对它进行了浇铸,以便按列进行操作,这使我的速度提高了25%。我看到了一些使用numpy广播来提高速度的帖子,但我不了解如何在此处应用它。
from scipy.stats import chi2_contingency
import pandas as pd
import numpy as np
def get_n_by_n_chi_distance_table(df):
chi_distance_df = pd.DataFrame(columns = df.index, index = df.index).fillna(0)
df_temp = df.T
cols = df_temp.columns
for col in cols:
cols = cols.drop(col)
for col_next in cols:
input_df = df_temp[[col,col_next]]#.values
input_df = input_df.loc[(input_df != 0).any(axis=1),:]
chi_distance_df.loc[col,col_next] = self.get_distance(input_df.values)
return chi_distance_df
def get_distance(obs):
return np.sqrt(chi2_contingency(obs.T)[0])