Python 数据帧旋转问题

Python 数据帧旋转问题,python,pandas,Python,Pandas,我有一些雷达数据的格式有点奇怪,我不知道如何使用pandas库正确地透视它 我的数据: speed time loc A 63 0000 B 61 0000 C 63 0000 D 65 0000 A 73 0005 B 71 0005 C 73 0005 D 75 0005 我想将其转换为如下所示的数据帧: 0000 0005 loc A 63 73 B 61

我有一些雷达数据的格式有点奇怪,我不知道如何使用pandas库正确地透视它

我的数据:

    speed   time
loc     
A    63  0000
B    61  0000
C    63  0000
D    65  0000
A    73  0005
B    71  0005
C    73  0005
D    75  0005
我想将其转换为如下所示的数据帧:

    0000    0005
loc     
A    63     73
B    61     71
C    63     73
D    65     75
我已经做了很多修改,但似乎不能得到正确的语法。有人能帮忙吗


谢谢

假设您的数据源位于csv文件中

from pandas.io.parsers import read_csv
df = read_csv("radar_data.csv")

df  # shows what is in df

       loc  speed  time
0    A     63     0
1    B     61     0
2    C     63     0
3    D     65     0
4    A     73     5
5    B     73     5
6    C     75     5
7    D     75     5
8    A     67     0
9    B     68     0
10   C     68     0
11   D     70     0
注意,我没有将
loc
设置为索引,因此它使用了一个自动递增整数索引

panel = df.set_index(['loc', 'time']).sortlevel(0).to_panel()
但是,如果您的数据帧已经使用
loc
作为索引,我们需要在其中附加
time
列,以便我们有一个loc-time层次索引。这可以使用
set\u index
方法中的新
append
选项来完成。像这样:-

panel = df.set_index(['time'], append=True).sortlevel(0).to_panel()
在任何一种情况下,我们都应达到以下情况:-

panel  # shows what panel is

<class 'pandas.core.panel.Panel'>
Dimensions: 1 (items) x 4 (major) x 2 (minor)
Items: speed to speed
Major axis: A to D
Minor axis: 0 to 5

panel["speed"]  # <--- This is what you are looking for.


time   0   5
loc         
A     63  67
B     73  61
C     68  73
D     63  68
panel#显示什么是panel
尺寸:1(项目)x 4(主要)x 2(次要)
项目:速度对速度
长轴:A至D
短轴:0到5

面板[“速度”]#您可以在此处使用枢轴方法:

In [71]: df
Out[71]: 
     speed  time
loc             
A       63     0
B       61     0
C       63     0
D       65     0
A       73     5
B       71     5
C       73     5
D       75     5

In [72]: df.reset_index().pivot('loc', 'time', 'speed')
Out[72]: 
time   0   5
loc         
A     63  73
B     61  71
C     63  73
D     65  75

太好了,谢谢!我的错误是没有使用sortlevel()to_panel()调用。现在阅读熊猫文档的那一部分。。。再次感谢!欢迎很高兴有帮助!请注意,对于数据帧,您没有自动增量索引。因此,我编辑了我的答案,建议您在向现有的“loc”索引中添加“time”时使用
append=True
选项。如果我想获得给定位置所有速度的序列对象,语法是什么样的?例如,如何从面板中检索行?
df\u by\u speed=panel[“speed”]
为您提供原始问题的结果。现在通过
loc
提取一个特定的序列,因为
loc
df\u by\u speed
中的一个索引,它就像
df\u by\u speed.ix['a']
一样简单,其中a是位置名。我得到的结果是“reshageError:index包含重复的条目,无法重新塑造”。我的一些位置是带有空格的字符串,这有关系吗?耶。对我来说也不管用。我得到<代码>重塑错误:索引包含重复的条目,也无法重塑
。我使用的是python 2.6.8,pandas 0.8.0。嘿,对不起,伙计们,你们尝试更新了吗?它现在对master有效。我模模糊糊地记得我们在0.8.0之后对整形手术进行了修复,所以如果你刚刚得到最新版本,它应该可以正常工作。使用稳定的版本,@zhangshe。将在升级之前等待下一个稳定版本的发布。我想这会管用的。尽管如此,还是有好的建议。谢谢