我的数据框有52列,销售数据(每周),52列,销售数量。我想用每个售卖单位的价格创建另外52个列。
该部门由于某种原因不起作用。我得到了
ValueError:传递的项目数量错误2,展示位置意味着1
此外,通过删除for循环可以更优雅(熊猫方式)实现吗?
这就是我的......
#!/bin/bash
if [ "$(uname)" == "Darwin" ]
then
# for Mac OSX
export KERAS_BACKEND=tensorflow
elif [ "$(uname)" == "Linux" ]
then
# for Linux
export KERAS_BACKEND=theano
fi
答案 0 :(得分:1)
你的意思是
data['sales']/data['quantity']
修改:这可能是一个符号问题。你能尝试一下:
data.iloc[:,i] / sap_data.iloc[:,i+52]
我相信你的想法是
答案 1 :(得分: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
答案 2 :(得分:1)
您可以使用Pandas 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个新数据框,一个用于sales
列df1
,另一个用于quantity
列df2
。 在您的情况下,您必须将其设置为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
中的名称重命名df1
中的列。
df2.columns = df1.columns
然后,创建df3
,一个新的数据框。
df3 = df2.divide(df1, axis= 1)
df3
是您需要分工的结果。如果您希望在一个数据框中包含所有这些数据,您只需重命名列和concatenate 3个数据帧。
print(df3)
quantity 1 quantity 2
0 10.0 10.0
1 10.0 10.0
2 10.0 10.0