如何在Pandas中将多列相互分开

时间:2017-04-01 09:20:12

标签: python pandas

我的数据框有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

3 个答案:

答案 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个新数据框,一个用于salesdf1,另一个用于quantitydf2在您的情况下,您必须将其设置为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