Pandas 将列重塑为时间序列行
Pandas reshape columns to time-series rows
我有一个 pandas 数据框(不幸的是重复...)
Date Partner Value
2017-02-01 Partner1 150
2017-03-01 Partner1 170
2017-02-01 Partner2 160
2017-03-01 Partner2 185
2017-02-01 Partner1 40
2017-03-01 Partner1 90
我想给小伙伴重塑一下,长这样:
Partner 2017-02-01 2017-03-01
Partner1 150 170
Partner2 160 185
Partner1 40 90
我该怎么做?
其实,我找到了我需要的答案:
series = pd.pivot_table(data, values="Value", index="Partner", columns="Date")
这是一个替代解决方案:
来源 DF:
In [143]: df
Out[143]:
Date Partner Value
0 2017-02-01 Partner1 150
1 2017-02-01 Partner1 199 # NOTE: duplicated `Date` & `Partner`
2 2017-03-01 Partner1 170
3 2017-02-01 Partner2 160
4 2017-03-01 Partner2 185
解决方案:
In [144]: df.groupby(['Partner','Date'])['Value'].mean().unstack().rename_axis(None).rename_axis(None, 1)
Out[144]:
2017-02-01 2017-03-01
Partner1 174.5 170.0
Partner2 160.0 185.0
我有一个 pandas 数据框(不幸的是重复...)
Date Partner Value
2017-02-01 Partner1 150
2017-03-01 Partner1 170
2017-02-01 Partner2 160
2017-03-01 Partner2 185
2017-02-01 Partner1 40
2017-03-01 Partner1 90
我想给小伙伴重塑一下,长这样:
Partner 2017-02-01 2017-03-01
Partner1 150 170
Partner2 160 185
Partner1 40 90
我该怎么做?
其实,我找到了我需要的答案:
series = pd.pivot_table(data, values="Value", index="Partner", columns="Date")
这是一个替代解决方案:
来源 DF:
In [143]: df
Out[143]:
Date Partner Value
0 2017-02-01 Partner1 150
1 2017-02-01 Partner1 199 # NOTE: duplicated `Date` & `Partner`
2 2017-03-01 Partner1 170
3 2017-02-01 Partner2 160
4 2017-03-01 Partner2 185
解决方案:
In [144]: df.groupby(['Partner','Date'])['Value'].mean().unstack().rename_axis(None).rename_axis(None, 1)
Out[144]:
2017-02-01 2017-03-01
Partner1 174.5 170.0
Partner2 160.0 185.0