У меня есть фрейм данных, в котором один столбец представляет собой категориальные строки, а следующий - соответствующие ему значения:
df = pd.DataFrame(list((['a', 'b', 'c', 'buy', 5],
['f', 'b', 'a', 'buy', 2],
['a', 'b', 'c', 'sold', 6],
['a', 'b', 'f', 'buy', 4],
['a', 'b', 'c', 'returned', 'yes'])), columns = ['attr1', 'attr2','attr3','status','value'])
Я хочу создать новые столбцы на основе столбца df.status
и заполнить пустые с помощью np.nan
, требуется поворот для нескольких столбцов:
Я ищу эффективное решение, подходящее для больших фреймов данных.
2 ответа
IIUC, Вы хотите:
In [255]: df.pivot(index=['attr1', 'attr2', 'attr3'],columns='status', values='value').rename_axis(None, axis=1).reset_index()
Out[255]:
attr1 attr2 attr3 buy returned sold
0 a b c 5 yes 6
1 a b f 4 NaN NaN
2 f b a 2 NaN NaN
Я не уверен, самый эффективный это метод или нет. Также ваша логика мне не понятна с картинки.
df.index.name = 'index'
df2 = df.pivot(columns='status', values='value')
df.drop(columns=['status', 'value'], inplace=True)
df = df.merge(df2, on='index')
Выход
attr1 attr2 attr3 buy returned sold
index
0 a b c 5 NaN NaN
1 f b a 2 NaN NaN
2 a b c NaN NaN 6
3 a b f 4 NaN NaN
4 a b c NaN yes NaN
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.