2015-03-25 87 views
0

我用熊貓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 

回答

1

這是因爲你有一個分級索引(即MultiIndex)作爲'數據透視表'數據框中的列。 如果你要打印出的df1['D'] * 2 reslults你會發現,你得到兩列:

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 

你可以找到關於如何在docs

+0

由於處理多指標的詳細信息,這個工作!另外,如果我不知道不同的列值(foo,bar)會怎麼樣;我如何將此擴展爲通用? – user1944674 2015-03-25 09:07:53

+0

爲答案增加了一般化的方法。 – Primer 2015-03-25 09:27:40