我在数据帧的列上运行字符串操作,以在另一个数组中生成新的列名。到现在为止还挺好。
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.codesTypeError:不可用类型:' numpy.ndarray'
答案 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