2017-04-01 25 views
1

我有一個包含銷售數據(每週)52列的數據框,銷售數量爲52列。我想創建另外52個colums,每個售價單位的價格。如何在Pandas中相互分割多個列

由於某種原因,該部門不工作。我得到

ValueError: Wrong number of items passed 2, placement implies 1

此外,可這更優雅(大熊貓的方式)通過循環去除可以實現嗎?

這是我...

#calculate cost per unit 
for i in range(0,52): 
    cw = i + 1 
    i = i + 5 
    print cw 
    data['Cost' + str(cw)] = data.iloc[:,i:i+1]/sap_data.iloc[:,i+52:i+1+52] 
+0

請提供小的(3-5行)可重複數據集和所需的dta集合 – MaxU

回答

1

演示量化的大熊貓解決方案:

In [23]: df = pd.DataFrame(np.random.randint(1, 8, (5, 6)), 
          columns=['amt01','amt02','amt03','qty01','qty02','qty03']) 

In [24]: df 
Out[24]: 
    amt01 amt02 amt03 qty01 qty02 qty03 
0  2  2  6  2  3  6 
1  4  3  7  3  7  5 
2  3  2  2  7  7  5 
3  3  7  4  4  3  1 
4  4  6  2  1  7  3 

In [25]: cols = ['new{:02d}'.format(i) for i in np.arange(1, 3+1)] 

In [26]: cols 
Out[26]: ['new01', 'new02', 'new03'] 

In [27]: df[cols] = df.filter(regex='^amt').div(df.filter(regex='^qty').values) 

In [28]: df 
Out[28]: 
    amt01 amt02 amt03 qty01 qty02 qty03  new01  new02  new03 
0  2  2  6  2  3  6 1.000000 0.666667 1.000000 
1  4  3  7  3  7  5 1.333333 0.428571 1.400000 
2  3  2  2  7  7  5 0.428571 0.285714 0.400000 
3  3  7  4  4  3  1 0.750000 2.333333 4.000000 
4  4  6  2  1  7  3 4.000000 0.857143 0.666667 
1

你的意思只是

data['sales']/data['quantity'] 

編輯:這可能是一個符號問題。你可以試試:

data.iloc[:,i]/sap_data.iloc[:,i+52] 

我相信這是什麼你心裏有

+0

基本上是。但是通過列移動...正如你所看到的,我試圖使用「/」。哪個失敗了。 – Jabb

1

可以使用熊貓pandas.DataFrame.divide功能。這是你在找什麼?

df = pd.DataFrame({'sales 1': [100,200,300], 'sales 2': [400,500,600], 'quantity 1': [10,20,30], 'quantity 2': [40,50,60]}) 
print(df) 
     quantity 1 quantity 2 sales 1 sales 2 
0   10   40  100  400 
1   20   50  200  500 
2   30   60  300  600 

創建2個新的數據幀,一個用於salesdf1quantitydf2中的另一個。 在你的情況,你將不得不與來自df1名稱設置爲52,而不是2

df1 = df.iloc[:, :2] 
df2 = df.iloc[:,2:] 
print(df1) 
      quantity 1 quantity 2 
0   10   40 
1   20   50 
2   30   60 
print(df2) 
     sales 1 sales 2 
0  100  400 
1  200  500 
2  300  600 

重命名列df2

df2.columns = df1.columns 

然後,創建一個新的數據幀df3

df3 = df2.divide(df1, axis= 1) 

df3是您需要的部門的結果。如果您想要在一個數據框中包含所有這些數據,您只需重命名這些列和3個數據幀即可。

print(df3) 
     quantity 1 quantity 2 
0  10.0  10.0 
1  10.0  10.0 
2  10.0  10.0