#python #pandas
#python #pandas
Вопрос:
У меня есть фрейм данных pandas, который выглядит следующим образом.
ITEM SKU PRICE
0 FOO OLD 120 45
1 FOO OLD 121 48
2 BAR OLD 122 51
3 BAR OLD 123 54
4 FOO NEW 120 60
5 FOO NEW 121 65
6 BAR NEW 122 70
7 BAR 123 75
8 BAR 124 80
Уточнение: я могу гарантировать отсутствие двусмысленности в отношении значения в ITEM
и фактически гарантирую, что оно будет правильно разделено на A и B перед преобразованием.
Я хочу преобразовать его в это:
ITEM SKU OLD NEW
0 FOO 120 45 60
1 FOO 121 50 65
2 BAR 122 55 70
3 BAR 123 60 75
4 BAR 124 NaN 80
Я знаю, что могу разделить старые цены на новые, переименовать столбцы и даже удалить " NEW"
и " OLD"
из ITEM
. Я понятия не имею, что с ним делать после этого.
Кроме того, я подозреваю, что в этих шагах нет необходимости, потому что, вероятно, есть лучший способ изменить этот фрейм данных более чисто.
Ответ №1:
Использование:
df[['A','B']] = df.pop('ITEM').str.split(expand=True)
df['B'] = df['B'].fillna('NEW')
df = df.set_index(['A','SKU','B'])['PRICE'].unstack().reset_index().rename_axis(None, axis=1)
print (df)
A SKU NEW OLD
0 BAR 122 70.0 51.0
1 BAR 123 75.0 54.0
2 BAR 124 80.0 NaN
3 FOO 120 60.0 45.0
4 FOO 121 65.0 48.0
Если не работает, потому что дублирует:
df = df.pivot_table(index=['A','SKU'], columns='B', values='PRICE').reset_index()
Комментарии:
1. Как это изменится, если мой оригинал
ITEM
не может быть разделен всегда и имеет такие значения, какFOO OLD
иFOO
вместоFOO OLD
иFOO NEW
?2. @Vishal — Возможно ли изменить образец данных для него?
3. Измененный образец данных, представленный в вопросе, согласно моему пониманию вашего комментария.
4. @Vishal — Значит, он должен отсутствовать в той или иной категории,
NEW
илиOLD
? Возможно ли отсутствие в обоих?