Правильный способ создания словаря из df или способ вычисления подобия jaccard - PullRequest
2 голосов
/ 10 июля 2019

У меня есть df с более чем 8000 столбцов. Каждый столбец (кроме первого) представляет двоичное значение 0 или 1.

|Name| t1| t2| t3|...| t4|  
| ..aa.. | 0 | 0 | 1 |...| 0 |  
| ..bb.. | 0 | 0 | 0 |...| 0 |  
| ..cc.. | 1 | 0 | 0 |...| 0 |

Моя цель - вычислить индекс jaccard между aa, bb, cc, для чего мне нужны значения, хранящиеся в списке, и поэтому я собираюсь использовать словарь.

Словарь должен выглядеть так:

{'aa': [0,0,1,...,0], 'bb': [0,0,0,...,0],...}

Как мне добиться такого результата, когда dict key = df index, а значение - это строка, представленная в виде списка?

Ответы [ 3 ]

2 голосов
/ 10 июля 2019

Другой подход:

{k: list(v.values()) for k, v in df.set_index('Name').to_dict('index').items()}
2 голосов
/ 10 июля 2019

Вы можете создать словарь, сжав и столбец Name, и остальную часть информационного кадра, и вызвав конструктор dict из полученных кортежей:

dict(zip(df.Name, df.loc[:,'t1':].values.tolist()))
# dict(zip(df.index, df.loc[:,'t1':].values.tolist())) # if name is the index
# {'aa': [0, 0, 1, 0], 'bb': [0, 0, 0, 0], 'cc': [1, 0, 0, 0]}

Входные данные:

   Name    t1     t2     t3     t4
0   aa      0      0      1      0
1   bb      0      0      0      0
2   cc      1      0      0      0
1 голос
/ 10 июля 2019

установите Name в качестве индекса и транспонируйте, затем выполните .to_dict():

df.set_index('Name').T.to_dict('list')

Если имя является индексом, просто сделайте:

df.T.to_dict('list')

{'aa': [0, 0, 1, 0], 'bb': [0, 0, 0, 0], 'cc': [1, 0, 0, 0]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...