我有一些奇怪的雷达数据格式,我无法弄清楚如何使用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
我想把它变成一个看起来像这样的DataFrame:
0000 0005
loc
A 63 73
B 61 71
C 63 73
D 65 75
我已经做了很多摆弄,但似乎无法使语法正确。有人可以帮忙吗?
谢谢!
答案 0 :(得分:5)
您可以在此处使用pivot方法:
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
答案 1 :(得分:3)
假设您的数据源位于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分层索引。这可以使用append
方法中的新set_index
选项来完成。像这样: -
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
希望这有帮助。