Я хотел бы кодировать целочисленные маски, хранящиеся в столбце данных pandas, в соответствующие двоичные функции, которые соответствуют битовым позициям в этих целых числах. Например, учитывая 4-битные целые числа и десятичное значение 11, я хотел бы получить 4 столбца со значениями 1, 0, 1, 1 и т. д. по всему столбцу.
Как кодировать целочисленные маски как биты в фиктивные переменные в пандах
comment
Пожалуйста, предоставьте образец данных.
- person YOLO   schedule 20.03.2018
comment
Пожалуйста, покажите часть своей работы и поделитесь с нами mcve, mcve2
- person rpanai   schedule 20.03.2018
Ответы (1)
Ты можешь использовать:
df = pd.DataFrame([list('{0:04b}'.format(x)) for x in df['col']], index=df.index).astype(int)
Спасибо, @pir за решение python 3.6+:
df = pd.DataFrame([list(f'{i:04b}') for i in df['col'].values], df.index)
Нумпи
Преобразование массива в DataFrame
- решение из этого ответа, а также добавлено разделение значений подкачки на строки:
d = df['col'].values
m = 4
df = pd.DataFrame((((d[:,None] & (1 << np.arange(m)))) > 0)[:, ::-1].astype(int))
#alternative
#df = pd.DataFrame((((d[:,None] & (1 << np.arange(m-1,-1,-1)))) > 0).astype(int))
Or:
df = pd.DataFrame(np.unpackbits(d[:,None].astype(np.uint8), axis=1)[:,-m:])
person
jezrael
schedule
20.03.2018
Python 3.6+ вы можете использовать f-строки
s = pd.Series(range(16)); pd.DataFrame([list(f'{i:04b}') for i in s.values], s.index)
- person piRSquared; 20.03.2018
Спасибо вам, ребята! Именно то, что я искал.
- person Wojciech Migda; 20.03.2018