2012-07-09 66 views
3

我在摆动熊猫时遇到了一些麻烦。该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 

有谁知道我该如何解决这个问题,以获得数据帧甲 我在找?

我当前调用枢轴这样:

df.pivot(index="dates", columns="location") 

,因为我有数据列我想转动的#(不想列出每一个作为参数)。我相信,默认情况下,pivot会枢转数据框中的其余列。 谢谢。

+0

请使用正确的格式。阅读此[如何格式化](http://stackoverflow.com/editing-help) – 2012-07-09 17:39:52

回答

1

你是怎么调用DataFrame.pivot和你的日期列是什么数据类型的?

假设我有一个数据帧,它类似于你的,日期列包含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 
+0

我实际上调用df.pivot没有第三个参数,因为在我的实际数据中,我有一个数据列,我想支配他们所有的人。那会是它的一部分吗? – tomas 2012-07-10 13:29:48

+0

您的日期栏中实际上是什么?它看起来像是被视为彼此独特的价值观。 – 2012-07-10 14:17:57

3

如果你有多个数据列,称没有值的列支点应该给你一个多指标一个枢轴转动架作为列:

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 
+0

是的,我看到这些信息是以multiindex的形式出现的,但是我也遇到了同样的问题,熊猫似乎认识到所有的日期都是独一无二的,我得到了一堆Nans。即使我将pivot参数值设置为C列,我仍然可以得到与我原始表中相同的行数,对于所有重复日期,只需使用Nans。 – tomas 2012-07-10 15:18:14

1

刚刚回答我自己的问题。我使用旧的Sybase模块导入数据,我认为它使用了mxDatetime中的旧DateTimeType对象。在该模块中,2011年1月1日的日期时间不一定等于2011年1月1日的另一个日期时间(例如,每个日期时间是唯一的)。因此,数据帧主键将每个列值视为索引中的唯一值。

感谢您的帮助。