Панды, поворачивающие фрейм данных, повторяющиеся строки

У меня небольшие проблемы с поворотом в пандах. 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 года (например, каждая дата-время была уникальной). Следовательно, сводка данных обрабатывает каждое значение столбца как уникальное в индексе.

Спасибо за помощь.

Другие вопросы по тегам