Существует способ использования Pandas в его пределах, но это только в предположении, что каждое состояние во входном наборе данных имеет одинаковое количество наблюдений, в противном случае коэффициент корреляции на самом деле не имеет смысла, и результаты станут немного фанки.
import pandas as pd
df = pd.DataFrame()
df['US_State'] = ["Alabama", "Alabama", "Alabama", "Michigan", "Michigan", "Michigan", "Oregon", "Oregon", "Oregon"]
df['Value'] = [1, 10, 9, 8, 9, 2, 6, 1, 2]
pd.DataFrame(df.groupby("US_State")['Value'].apply(lambda x: list(x))).T.apply(lambda x: pd.Series(*x), axis=0).corr()
, что приводит к
US_State Alabama Michigan Oregon
US_State
Alabama 1.000000 -0.285578 -0.996078
Michigan -0.285578 1.000000 0.199667
Oregon -0.996078 0.199667 1.000000
В основном код делает то, что собирает данные для каждого состояния в одну ячейку в виде списка, транспонирует кадр данных, чтобы сделать столбцы состояний, а затем расширяет собранную ячейку данных списка в строки данных для каждого состояния. Затем вы можете просто вызвать стандартный corr()
метод pandas dataframe.