【发布时间】:2016-05-03 18:54:41
【问题描述】:
我有以下数据框:
url='https://raw.githubusercontent.com/108michael/ms_thesis/master/crsp.dime.mpl.df'
zz=pd.read_csv(url)
zz.head(5)
date feccandid feccandcfscore.dyn pacid paccfscore cid catcode type_x di amtsum state log_diff_unemployment party type_y bills years_exp disposition billsum
0 2006 S8NV00073 0.496 C00000422 0.330 N00006619 H1100 24K D 5000 NV -0.024693 Republican rep s22-109 12 support 3
1 2006 S8NV00073 0.496 C00375360 0.176 N00006619 H1100 24K D 4500 NV -0.024693 Republican rep s22-109 12 support 3
2 2006 S8NV00073 0.496 C00113803 0.269 N00006619 H1130 24K D 2500 NV -0.024693 Republican rep s22-109 12 support 2
3 2006 S8NV00073 0.496 C00249342 0.421 N00006619 H1130 24K D 5000 NV -0.024693 Republican rep s22-109 12 support 2
4 2006 S8NV00073 0.496 C00255752 0.254 N00006619 H1130 24K D 4000 NV -0.024693 Republican rep s22-109 12 support 2
我想对其进行操作,使date 列是一个索引,feccandid 值是列标题(我稍后会将它们设为第二个索引,以便我可以将框架发送到面板)和另一列标题变成行。期望的输出看起来是这样的:
date feccandid S8NV00072 S8NV00074 S8NV00075 S8NV00076 S8NV00077
2006 feccandcfscore.dyn 0.496 0.496 0.496 0.496 0.496
2006 pacid C00000422 C00375360 C00113803 C00249342 C00255752
2006 paccfscore 0.33 0.176 0.269 0.421 0.254
2006 cid N00006619 N00006619 N00006619 N00006619 N00006619
2006 catcode H1100 H1100 H1130 H1130 H1130
2006 type_x 24K 24K 24K 24K 24K
2006 di D D D D D
2006 amtsum 5000 4500 2500 5000 4000
2006 state NV NV NV NV NV
2006 log_diff_unemployment -0.024693 -0.024693 -0.024693 -0.024693 -0.024693
2006 party Republican Republican Republican Republican Republican
2006 type_y rep rep rep rep rep
2006 bills s22-109 s22-109 s22-109 s22-109 s22-109
2006 years_exp 12 12 12 12 12
2006 disposition support support support support support
2006 billsum 3 3 2 2 2
我已按照 jezrael
的建议尝试了以下方法zz=zz.pivot_table(index='date', columns='feccandid', aggfunc=np.mean)
zz.head()
feccandcfscore.dyn ... billsum
feccandid H0AL02087 H0AL07060 H0AR01083 H0AR02107 H0AR03055 H0AR04038 H0AZ01259 H0AZ03362 H0CA15148 H0CA19173 ... S8MI00158 S8MN00438 S8MS00055 S8MT00010 S8NC00239 S8NE00117 S8NM00010 S8NV00073 S8OR00207 S8WI00026
date
2005 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2006 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN 2.125 NaN NaN
2007 NaN 0.016 NaN NaN NaN -0.151 NaN NaN -0.777 NaN ... 1.000000 NaN 1.666667 1.552632 NaN NaN 2.0 1.000 NaN 2.0
2008 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... 1.285714 NaN NaN 5.431373 NaN NaN NaN NaN NaN NaN
2009 NaN NaN NaN NaN NaN -0.086 NaN NaN -0.790 NaN ... NaN NaN NaN 2.433333 NaN NaN NaN NaN 3.0 2.8
这与我想要的很接近,只是我试图将 feccandid 作为唯一的列标题和原始列标题(在最后一个示例中,作为最顶层的列标题) 转置为行。
【问题讨论】:
-
您想将修改过的(由 pivot_table 聚合的)元素传递给面板吗?如果是这样,那么您可以使用:
zz.columns = zz.columns.reorder_levels((1,0))对数据透视表中的标签重新排序。之后,您可以使用zz.T.to_panel()将其发送到面板,然后使用swapaxis()。如果您希望保持所有元素不变,那么它也是可行的(我可以稍后编写一些代码)但我不确定生成的面板的大小是否会膨胀。 -
@ptrj:我刚看到你的消息。我会在今天晚些时候回复你。我将尝试用数据改变一些东西。
-
@ptrj:感谢您的评论!我认为没有必要保持元素不变。我会按照你的建议努力。