在python中用qcut循环两个数组

时间:2017-01-06 09:15:40

标签: python pandas multidimensional-array dataframe

我在数据帧的列上运行字符串操作,以在另一个数组中生成新的列名。到现在为止还挺好。

columns = dfnum.columns.values
print(columns)
qcolumns = [x + 'q' for x in columns]
print(qcolumns)

当我尝试在这两个数组上运行for循环以生成数据库中原始值的分位数切割时,我得到了这个:

for column in columns, qcolumn in qcolumns:
dfnumqcut = pd.qcut(dfnum[[column]],5)
dfnum[qcolumn] = dfnumqcut.codes

我在下面得到了一堆错误。我想要的是获取qcuts并将它们连接到数据帧。我可以按照下面的列逐列进行此操作,但应该有一些方法可以使用for循环:

dfnumqcut = pd.qcut(dfnum[['Market Cap']],5)
dfnum['Market Capq'] = dfnumqcut.codes
  

1表示列中的列,qcolumn表示qcolumns:
  ----> 2 dfnumqcut = pd.qcut(dfnum [[column]],5)
  3 dfnum [qcolumn] = dfnumqcut.codes

     

TypeError:不可用类型:' numpy.ndarray'

1 个答案:

答案 0 :(得分:0)

我认为您可以使用enumerate按位置选择qcolumns的值:

for i, column in enumerate(columns):
    dfnumqcut = pd.qcut(dfnum[[column]],5)
    dfnum[qcolumns[i]] = dfnumqcut.codes
print (dfnum)

不创建qcolumns的解决方案 - 在一个loop中创建新的列名:

for i, column in enumerate(columns):
    dfnumqcut = pd.qcut(dfnum[[column]],5)
    dfnum[column + 'q'] = dfnumqcut.codes
print (dfnum)

更简单的解决方案 - 如果循环DataFrame,如果循环columns值:

for i, column in enumerate(dfnum):
    dfnum[column + 'q'] = pd.qcut(dfnum[[column]],5).codes
print (dfnum)

样品:

dfnum = pd.DataFrame({'A':[1,2,3],
                    'B':[4,5,6],
                    'C':[7,8,9],
                    'D':[1,3,5],
                    'E':[5,3,6],
                    'F':[7,4,3]})

print (dfnum)
  A  B  C  D  E  F
0  1  4  7  1  5  7
1  2  5  8  3  3  4
2  3  6  9  5  6  3

for i, column in enumerate(dfnum):
    dfnum[column + 'q'] = pd.qcut(dfnum[[column]],5).codes
print (dfnum)
   A  B  C  D  E  F  Aq  Bq  Cq  Dq  Eq  Fq
0  1  4  7  1  5  7   0   0   0   0   2   4
1  2  5  8  3  3  4   2   2   2   2   0   2
2  3  6  9  5  6  3   4   4   4   4   4   0