所以我有一组非常典型的数据,如下所示:
data = {'date': {0: '10/02/2017',
1: '10/02/2017',
2: '10/02/2017',
3: '10/02/2017',
4: '10/02/2017'},
'field': {0: 'field1', 1: 'field2', 2: 'field1', 3: 'field2', 4: 'field3'},
'type': {0: 'type1', 1: 'type1', 2: 'type2', 3: 'type2', 4: 'type2'},
'value': {0: 1.79067,
1: 1.7987200000000001,
2: 1.7978900000000002,
3: 1.8001099999999999,
4: 1.8045599999999999}}
df = pd.DataFrame(data)
df.date = pd.to_datetime(df.date)
Run Code Online (Sandbox Code Playgroud)
这应该是这样的(真实数据集有许多不同的日期):
date field type value
0 2017-10-02 field1 type1 1.79067
1 2017-10-02 field2 type1 1.79872
2 2017-10-02 field1 type2 1.79789
3 2017-10-02 field2 type2 1.80011
4 2017-10-02 field3 type2 1.80456
Run Code Online (Sandbox Code Playgroud)
我想创建一个透视的多索引数据框,例如:
type1 type2
field field1 field2 field1 field2 field3
date
2017-10-02 1.79067 1.79872 1.79789 1.80011 1.80456
Run Code Online (Sandbox Code Playgroud)
到目前为止我找到的最聪明的方法是:
grouped = df.groupby('type')
res = {}
for name, df in grouped:
res[name] = df.pivot(index='date', columns='field', values='value')
df = pd.concat(res, axis=1)
Run Code Online (Sandbox Code Playgroud)
有没有其他有效的方法来实现这一目标?
谢谢
选项1
通过使用 unstack
In [36]: df.set_index(['date','field','type'])['value'].unstack([-1,-2])
Out[36]:
type type1 type2
field field1 field2 field1 field2 field3
date
2017-10-02 1.79067 1.79872 1.79789 1.80011 1.80456
Run Code Online (Sandbox Code Playgroud)
选项2
pivot_table
pd.pivot_table(df,values='value',index='date',columns=['type','field'])
Out[464]:
type type1 type2
field field1 field2 field1 field2 field3
date
2017-10-02 1.79067 1.79872 1.79789 1.80011 1.80456
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39 次 |
| 最近记录: |