Список наборов в столбце '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
См. первый ответ здесь для последней строки кода.