Распределение частот списка по сравнению с другим столбцом - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь получить частотное распределение столбца, представляющего собой список слов по отношению к меткам классов.

Label                Numbers
0                    [(a,b,c)]
0                    [(d)]
0                    [(e,f,g)]
1                    [(a,z)]
1                    [(d,x,y)]

Выходные данные должны быть:

         0          1
a        1          1
b        1          0
c        1          0
d        1          1
e        1          0
f        1          0        
g        1          0
x        0          1
y        0          1
z        0          1

1 Ответ

0 голосов
/ 12 сентября 2018

Список наборов в столбце 'Numbers' делает манипулирование DataFrame очень трудным (это не аккуратные данные). Решение состоит в том, чтобы развернуть DataFrame таким образом, чтобы в столбце 'Numbers' было только одно число, соответствующее одному значению в столбце 'Label'. Предполагая, что ваши данные находятся в DataFrame с именем df, следующий код выполняет эту операцию:

rows_list = []

for index, row in df.iterrows():
    for element in row['Numbers'][0]:
        dict1 = {}
        dict1.update(key=row['Label'], value=element)
        rows_list.append(dict1)

new_df = pd.DataFrame(rows_list)
new_df.columns = ['Label', 'Numbers']

Результат

  Label Numbers
0     0     a
1     0     b
2     0     c
3     0     d
4     0     e
5     0     f
6     0     g
7     1     a
8     1     z
9     1     d
10    1     x
11    1     y    

Теперь это вопрос поворота:

print(new_df.pivot_table(index='Numbers', columns='Label', aggfunc=len,
                         fill_value=0))

Результат

Label    0  1
Numbers      
a        1  1
b        1  0
c        1  0
d        1  1
e        1  0
f        1  0
g        1  0
x        0  1
y        0  1
z        0  1

См. первый ответ здесь для последней строки кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...