Pandas obtêm sequência de strings fornecidas com 1s e 0s
Oct 10 2020
Dado o seguinte:
import pandas as pd
df = pd.DataFrame({'a':['K','1','1,2,3']})
df
a
0 K
1 1
2 1,2,3
Eu gostaria de converter os valores na coluna a em uma sequência correspondente de 1s e 0s dado este mapa:
K 1 2 3 4 5
1 1 1 1 1 1
Se um valor estiver presente, um 1 é colocado no lugar de um 0. Se o valor não estiver presente, o lugar é mantido por um 0. Se nenhum valor estiver presente, a sequência seria uma string de 6 0s.
Portanto, "K" seria: 100.000
E "1,2,3" seria: 011100
Resultado desejado:
a b
0 K 100000
1 1 010000
2 1,2,3 011100
Eu tentei pd.get_dummies(df['a']), mas só funciona onde há apenas 1 caractere na célula.
Desde já, obrigado!
Respostas
1 AndrejKesely Oct 10 2020 at 03:55
Espero ter entendido bem sua pergunta, mas você pode usar .apply()com mapa personalizado:
m = {'K': 1 << 0,
'1': 1 << 1,
'2': 1 << 2,
'3': 1 << 3,
'4': 1 << 4,
'5': 1 << 5}
df['b'] = df.a.apply(
lambda x: '{:06b}'.format(sum(m[v] for v in x.split(',')))[::-1]
)
print(df)
Impressões:
a b
0 K 100000
1 1 010000
2 1,2,3 011100
1 BENY Oct 10 2020 at 03:57
Vamos tentar get_dummiesentãoreindex
s = df.a.str.get_dummies(',').reindex(columns=['K','1','2','3','4','5'],fill_value=0).astype(str).agg(''.join,1)
0 100000
1 010000
2 011100
dtype: object
df['b'] = s
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino