У меня есть corr_matrix
после pandas
df.corr
как:
id | 1 2 3 4 5
---|-------------------
1 | 1 .8 .2 .5 -.1
2 |.1 1 -.4 -.1 .8
.....other ids corr
Теперь я хочу получить dataframe
как
1 | 2 3 4 5
--|-----------
1 | 2 ....other
2 | 5
4 | 1
3 |
|
рассмотрим первый столбец:
1 |
--|
1 |
2 |
4 |
3 |
Здесь имя столбца 1 - это идентификатор, а его данные - это идентификаторы, которые наиболее коррелируют с ним в отсортированном порядке (от высокого к низкому), т. Е. Он соотносится с самим собой, поэтому 1 сверху и 5 отрицательно коррелированы, так что нет ' т включены
То, что я делал, это:
df = pd.DataFrame(corr_matrix.unstack())
df.sort_values(by=["id", 0], ascending=[True, False], inplace=True)
df.reset_index(inplace=True)
df.rename({"level_0": "alternative", 0: "corr"},
axis='columns', inplace=True)
df = df[~(df['corr'] < 0)]
Это дало мне:
alternative id corr
0 3 3 1.000000
1 291 3 0.777778
2 171 3 0.654654
3 567 3 0.654654
4 561 3 0.554826
5 176 3 0.518476
6 579 3 0.518476
а потом я сделал:
corr_dict= a.groupby('id')
.apply(lambda x: dict(zip(x.alternative, x.corr))).to_dict()
Это дает мне ошибку как:
TypeError: zip argument #2 must support iteration
То, что я думал, чтобы преобразовать его в dictionary
, а затем обратно в dataframe
с помощью:
from pandas.io.json import json_normalize
new_df = json_normalize(corr_dict)
Поскольку я новичок в pandas
, есть ли простой способ сделать это, на самом деле идентификатор здесь идентификатор продукта , и я пытаюсь найти все продукты, которые связаны с каждым продуктом по убыванию порядок, который положительно коррелирует. Я должен использовать это позже где-нибудь.
ОБНОВЛЕНО
Хотя это работает для меня:
corr_dict= a.groupby('product_id')
my_dict = {}
for product_id, product_id_alternatives_df in corr_dict:
my_dict[product_id] = list(product_id_alternatives_df.alternative)
Мне было интересно, есть ли более простой способ сделать это
![Correct](https://i.stack.imgur.com/JAEwK.png)
ОБНОВЛЕНИЕ 2
ValueError: arrays must all be same length
Поскольку массивы имеют разную длину, поэтому, получая ошибку значения, как их пропустить? поскольку корреляции отрицательны, а не идентификаторы