#python #pandas #dataframe #group-by
#python #pandas #фрейм данных #группировка по
Вопрос:
Я хочу получить информацию о сходстве стран по продуктам. У меня есть такой df:
cntr prod
0 fr cheese
1 ger potato
2 it cheese
3 it tomato
4 fr wine
5 it wine
6 ger cabbage
7 fr cabbage
Я пытался получить матрицу сосуществования количества продуктов, которая как таковая указывала бы мне на сходство стран:
fr ger it
fr 1 2
ger 1 0
it 2 0
мой тест был первым, в котором я приступил к созданию перекрестной группы, пытаясь добавить 3-е измерение, чтобы получить
fr fr
ger 1
it 2
ger fr 1
ger
it 0
it fr 2
ger 0
it
это то, что я пробовал, но не удается добавить второй слой..
есть предложения?
Комментарии:
1. Что такое диагональные значения?
Ответ №1:
Я считаю, что вам нужно merge
для перекрестного соединения с crosstab
и, при необходимости, установить diagonal на NaN
by numpy.fill_diagonal
:
df = pd.merge(df, df, on='prod')
df = pd.crosstab(df['cntr_x'], df['cntr_y']).astype(float)
np.fill_diagonal(df.values, np.nan)
print (df)
cntr_y fr ger it
cntr_x
fr NaN 1.0 2.0
ger 1.0 NaN 0.0
it 2.0 0.0 NaN
Комментарии:
1. это как раз то, что нужно, израэль, большое тебе спасибо. по диагонали мне действительно все равно, так как я хочу проверять друг друга, а не себя. Я начал чувствовать, что перекрестная таблица может быть полезной, но я застрял с groupby. Спасибо!