我正在使用pandas 0.16.0和numpy 1.9.2,我做了以下操作在数据透视表中添加了计算字段(列)
如下设置数据框,
df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 6, 'B' : ['A', 'B', 'C'] * 8, 'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4, 'D' : np.random.randn(24), 'E' : np.random.randn(24), 'F' : [datetime.datetime(2013, i, 1) for i in range(1, 13)] + [datetime.datetime(2013, i, 15) for i in range(1, 13)]})
如下所示旋转数据框,
df1 = df.pivot_table(values=['D'],index=['A'],columns=['C'],aggfunc=np.sum,margins=False)
尝试如下添加计算字段,但出现错误(请参见下文),
df1['D2'] = df1['D'] * 2
错误,
ValueError: Wrong number of items passed 2, placement implies 1
这是因为您在“数据透视表”数据框中有一个层次索引(即MultiIndex)作为列。如果您打印出的结果,df1['D'] * 2
您会注意到您会看到两列:
C bar foo
A
one -3.163 -10.478
three -2.988 1.418
two -2.218 3.405
因此,将其放回去,df1
您需要提供两列以将其分配给:
df1[[('D2','bar'), ('D2','foo')]] = df1['D'] * 2
产生:
D D2
C bar foo bar foo
A
one -1.581 -5.239 -3.163 -10.478
three -1.494 0.709 -2.988 1.418
two -1.109 1.703 -2.218 3.405
更通用的方法:
new_cols = pd.MultiIndex.from_product(('D2', df1.D.columns))
df1[new_cols] = df1.D * 2
您可以在文档中找到有关如何处理MultiIndex的更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句