Панды, поворачивающие фрейм данных, повторяющиеся строки
У меня небольшие проблемы с поворотом в пандах. dataframe
(даты, местоположение, данные) Я работаю над выглядит так:
dates location data
date1 A X
date2 A Y
date3 A Z
date1 B XX
date2 B YY
По сути, я пытаюсь развернуться на месте, чтобы в итоге получился такой кадр данных:
dates A B C
date1 X XX etc...
date2 Y YY
date3 Z ZZ
К сожалению, когда я поворачиваюсь, индекс, который эквивалентен исходному столбцу дат, не изменяется, и я получаю:
dates A B C
date1 X NA etc...
date2 Y NA
date3 Z NA
date1 NA XX
date2 NA YY
Кто-нибудь знает, как я могу решить эту проблему, чтобы получить формат данных, который я ищу?
Я сейчас называю Pivot как таковой:
df.pivot(index="dates", columns="location")
потому что у меня есть # столбцов данных, которые я хочу развернуть (не хочу перечислять каждый из них в качестве аргумента). Я полагаю, что по умолчанию сводка поворачивает остальные столбцы в кадре данных. Благодарю.
3 ответа
Если у вас есть несколько столбцов данных, вызов сводной таблицы без столбцов значений должен дать вам поворотную рамку с MultiIndex в качестве столбцов:
In [3]: df
Out[3]:
columns data1 data2 index
0 a -0.602398 -0.982524 x
1 a 0.880927 0.818551 y
2 b -0.238849 0.766986 z
3 b -1.304346 0.955031 x
4 c -0.094820 0.746046 y
5 c -0.835785 1.123243 z
In [4]: df.pivot('index', 'columns')
Out[4]:
data1 data2
columns a b c a b c
index
x -0.602398 -1.304346 NaN -0.982524 0.955031 NaN
y 0.880927 NaN -0.094820 0.818551 NaN 0.746046
z NaN -0.238849 -0.835785 NaN 0.766986 1.123243
Как вы вызываете DataFrame.pivot и какой тип данных у вас в столбце дат?
Предположим, у меня есть DataFrame, который похож на ваш, столбцы даты содержат объекты datetime:
In [52]: df
Out[52]:
data dates loc
0 0.870900 2000-01-01 00:00:00 A
1 0.344999 2000-01-02 00:00:00 A
2 0.001729 2000-01-03 00:00:00 A
3 1.565684 2000-01-01 00:00:00 B
4 -0.851542 2000-01-02 00:00:00 B
In [53]: df.pivot('dates', 'loc', 'data')
Out[53]:
loc A B
dates
2000-01-01 0.870900 1.565684
2000-01-02 0.344999 -0.851542
2000-01-03 0.001729 NaN
Просто ответил на мой вопрос. Я использовал старый модуль Sybase для импорта данных, и я думаю, что он использовал старый объект DateTimeType из mxDatetime. В этом модуле дата-время 01 января 2011 года не обязательно будет равна другой дате-времени 01 января 2011 года (например, каждая дата-время была уникальной). Следовательно, сводка данных обрабатывает каждое значение столбца как уникальное в индексе.
Спасибо за помощь.