У меня есть два фрейма данных pandas, которые выглядят примерно одинаково, но с разной информацией, хранящейся в них. Мой вопрос будет о том, как сравнить два фрейма данных, чтобы гарантировать совпадение столбца и строки перед выполнением некоторого анализа и получить третий фрейм данных корреляции между ними.
df1 (50x14492):
TYPE GENRE1 GENRE2
Name1 .0945 .0845
Name2 .9074 Nan
Name3 1 0
и df2 (50x14492):
TYPE GENRE1 GENRE2
Name1 .9045 .895
Name2 .074 1
Name3 .5 .045
Надеемся на результат df3, который пока не получен (50x14492):
TYPE GENRE1 GENRE2
Name1 spearsonr(.9045,.9045) spearsonr(.0845,.895)
Name2 spearsonr(.9074,.074) spearsonr(Nan,1)
Name3 spearsonr(1,.5) spearsonr(0,.045)
Я хотел бы сравнить df1.GENRE1.Name1 с df2.GENRE1.Name1, но теряюсь в реализации. Для этого у меня есть следующий код:
for key1, value1 in df1.iteritems():
for key2, value2 in df2.iteritems():
if key1 == key2:
# this gets me to df1.GENRE1 == df2.GENRE1
for newkey1, newval1 in key1.iterrows():
for newkey2, newval2 in key2.iterrows():
if newkey1 == newkey2:
# this does not seem to get me to df1.GENRE1.Name1 == df2.GENRE1.Name1
scipy.stats.spearmanr(newval1, newval2)
Это позволяет мне сравнивать df1.GENRE1 и df2.GENRE1, но я не уверен, как перейти к следующему логическому шагу, чтобы также убедиться, что df1.GENRE1.Name1 == df2.GENRE1.Name1. Другими словами, я не уверен, как обеспечить соответствие строк теперь, когда у меня есть столбцы.
ПРИМЕЧАНИЕ: я попытался использовать spearmanr на двух полных фреймах данных как таковых:
corr, p_val = scipy.stats.spearmanr(df1, df2, axis=0, nan_policy='omit')
но вместо того, чтобы получить новый фрейм данных того же размера (50x14492), я получаю обратно таблицу размером 100x100.
Аналогично, если я использую:
corr, p_val = scipy.stats.spearmanr(df1['GENRE1'], df2['GENRE1'], axis=0, nan_policy='omit')
Я получаю корреляцию двух столбцов в целом, а не каждой строки этого столбца. (Размер 1X14492)