我有一些这样的数据:
import pandas as pd
df = pd.DataFrame(index = range(1,13), columns=['school', 'year', 'metric', 'values'], )
df['school'] = ['id1']*6 + ['id2']*6
df['year'] = (['2015']*3 + ['2016']*3)*2
df['metric'] = ['tuition', 'admitsize', 'avgfinaid'] * 4
df['values'] = range(1,13)
df
school year metric values
1 id1 2015 tuition 1
2 id1 2015 admitsize 2
3 id1 2015 avgfinaid 3
4 id1 2016 tuition 4
5 id1 2016 admitsize 5
6 id1 2016 avgfinaid 6
7 id2 2015 tuition 7
8 id2 2015 admitsize 8
9 id2 2015 avgfinaid 9
10 id2 2016 tuition 10
11 id2 2016 admitsize 11
12 id2 2016 avgfinaid 12
我想将指标和值列转换为宽格式。也就是说,我想要:
school year tuition admitsize avgfinaid
id1 2015 1 2 3
id1 2016 4 5 6
id2 2015 7 8 9
id2 2016 10 11 12
如果这是 R,我会这样做:
df2 <- dcast(df, id + year ~ metric, value.var = "values")
我该如何在熊猫中做到这一点?我读过了这个(否则非常有帮助)所以答案 https://stackoverflow.com/questions/25618650/r-dcast-equivalent-in-python-pandas and 这个(在其他方面也很出色)示例 http://pandas.pydata.org/pandas-docs/stable/comparison_with_r.html在 pandas 文档中,但没有理解如何将其应用到我的需求。我不需要像 dcast 这样的单行代码,只需一个如何在标准 DataFrame(不是 groupby、多索引或其他奇特对象)中获取结果的示例。
您可以使用数据透视表() http://pandas.pydata.org/pandas-docs/stable/generated/pandas.pivot_table.html:
In [23]: df2 = (df.pivot_table(index=['school', 'year'], columns='metric',
....: values='values')
....: .reset_index()
....: )
In [24]:
In [24]: df2
Out[24]:
metric school year admitsize avgfinaid tuition
0 id1 2015 2 3 1
1 id1 2016 5 6 4
2 id2 2015 8 9 7
3 id2 2016 11 12 10
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)