我在使用大熊猫旋转方面遇到了一些麻烦。我正在处理的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")
因为我有一些我想要转动的数据列(不希望将每个列列为参数)。我相信默认情况下,pivot会转动数据框中的其余列。 感谢。
答案 0 :(得分:3)
如果您有多个数据列,则调用不带值列的pivot应该为您提供一个带有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
答案 1 :(得分:2)
您如何调用DataFrame.pivot以及您的日期列是什么数据类型?
假设我有一个类似于你的DataFrame,则dates列包含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
答案 2 :(得分:1)
刚刚回答了我自己的问题。我使用旧的Sybase模块导入数据,我认为它使用了mxDatetime中的旧DateTimeType对象。在该模块中,2011年1月1日的日期时间不一定等于2011年1月1日的另一个日期时间(例如,每个日期时间是唯一的)。因此,dataframe pivot将每个列值视为索引中的唯一值。
感谢您的帮助。