似乎有很多可能将平面数据转换为3d数组,但我在某种程度上找不到一个有效的方法:假设我有一些数据有列= ['name','type','date ','价值']。当我尝试通过
转动时pivot(index='name', columns=['type', 'date'], values='value')
我得到了
ValueError: Buffer has wrong number of dimensions (expected 1, got 2)
我是否可以阅读开发熊猫的文档?看起来这就是那里描述的用法。我正在跑0.8只熊猫。
我想,我想知道我是否有一个MultiIndex ['x','y','z']系列,是否有大熊猫方式将其放入面板?我可以使用groupby并完成工作,但这几乎就像我在numpy中组装n-d数组时所做的那样。看起来像是一个相当通用的操作,所以我想它可能已经实现了。
答案 0 :(得分:8)
pivot
仅支持使用单个列生成列。您可能希望使用pivot_table
来生成使用多列的数据透视表,例如
pandas.tools.pivot.pivot_table(your_dataframe, values='value', index='name', columns=['type', 'date'], aggfunc='sum')
pivot
和API reference pivot_table
中提及的层次结构列与您有多个值字段而非多个的情况相关类。
假设'type'和'date'是类别,其值应该用作列名,那么您应该使用pivot
。
但是,如果您想为同一类别(例如“类型”)的不同值字段使用单独的列,则应使用df = DataFrame({'name': ['A', 'B', 'A', 'B'], 'type': [1, 1, 2, 2], 'date': ['2012-01-01', '2012-01-01', '2012-02-01', '2012-02-01'], 'value': [1, 2, 3, 4]})
pt = df.pivot_table(values='value', index='name', columns=['type', 'date'])
p = df.pivot('name', 'type')
而不指定值列,将类别指定为columns参数。
例如,假设您有此DataFrame:
type 1 2
date 2012-01-01 2012-02-01
name
A 1 3
B 2 4
将是:
date value
type 1 2 1 2
name
A 2012-01-01 2012-02-01 1 3
B 2012-01-01 2012-02-01 2 4
和p将是:
index
注意:对于pandas版本< 0.14.0,columns
和rows
关键字参数应分别替换为cols
和{{1}}。
答案 1 :(得分:4)
原帖以问题结束:
“我想知道我是否有一个MultiIndex ['x','y','z']系列,是否有大熊猫方式将其放入面板?”
我自己正在寻找解决方案。
我最终得到了以下内容:
In [1]: import pandas as pd
## generate xyz example:
In [3]: df = pd.DataFrame({col:pd.np.random.randint(0,10,10)
for col in ['x','y','z','data']})
## set all x,y,z coordinates as indices
In [5]: df.set_index(['x','y','z'], inplace=True)
## set the z coordinate as headers of the columns
# NB: this is will turn the data into "dense" with NaNs where there were no 'data'
In [7]: df = df['data'].unstack()
## now it is ready to be "pivot"ed into a panel
In [9]: data_panel = df.to_panel()
In [10]: df
Out[10]:
data
z 1 3 4 5 6 7 9
x y
1 5 NaN NaN NaN NaN NaN NaN 1
6 NaN NaN NaN NaN NaN NaN 0
2 9 NaN NaN NaN NaN NaN 1 NaN
3 9 6 NaN NaN NaN NaN NaN NaN
5 9 NaN NaN NaN NaN NaN NaN 8
7 1 NaN NaN NaN NaN 8 NaN NaN
3 NaN NaN NaN NaN NaN NaN 5
7 NaN NaN NaN 1 NaN NaN NaN
9 NaN 0 NaN NaN NaN NaN NaN
9 5 NaN NaN 1 NaN NaN NaN NaN
[10 rows x 7 columns]
In [11]: data_panel
Out[11]:
<class 'pandas.core.panel.Panel'>
Dimensions: 7 (items) x 6 (major_axis) x 6 (minor_axis)
Items axis: 1 to 9
Major_axis axis: 1 to 9
Minor_axis axis: 1 to 9
列标题将是Panel的项目,第一级索引是MajorAxis(行),第二级是MinorAxis(列)