Создайте матрицу с набором диапазонов в столбцах и набором диапазонов в строках с Pandas - PullRequest
0 голосов
/ 01 мая 2020

У меня есть фрейм данных, в котором один столбец 'F' имеет значения от 0 до 100, а второй столбец 'E' имеет значения от 0 до 500. Я хочу создать матрицу, в которой частоты попадают в диапазоны в обоих ' F 'и' E '. Например, я хочу знать частоту в диапазоне от 20 до 30 для «F» и в диапазоне от 400 до 500 для «E».

Я ожидаю получить следующую матрицу:

матрица диапазонов

Я пытался сгруппировать диапазоны, используя pd.cut () и groupby (), но я не знаю, как объединить данные.

Я действительно Благодарим Вас за помощь в создании матрицы с pandas.

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Итак, я нашел способ создания матрицы, который, очевидно, был вдохновлен ответом @ usher. Я знаю, что это более запутанно, но хотел поделиться этим. Еще раз спасибо @ usher

E=df.E
F=df.F

bins_E=pd.cut(E, bins=(max(E)-min(E))/100)
bins_F=pd.cut(F, bins=(max(F)-min(F))/10)

bins_EF=bins_E.to_frame().join(bins_F)
freq_EF=bins_EF.groupby(['E', 'F']).size().reset_index(name="counts")
Mat_FE = freq_EF.pivot(columns='E', index='F')
0 голосов
/ 01 мая 2020

Вы можете использовать функцию вырезания, чтобы создать ячейку «тег / имя» для каждого столбца. после того, как вы развернете фрейм данных.

df['rows'] = pd.cut(df['F'], 5) 
df['cols'] = pd.cut(df['E'], 5) 
df = df.groupby(['rows', 'cols']).agg('sum').reset_index([0,1], False) # your agg func here
df = df.pivot(columns='cols', index='rows')
...