【问题标题】:Looping over two arrays with qcut in python在python中使用qcut循环两个数组
【发布时间】:2017-05-21 00:30:58
【问题描述】:

我在数据框的列上运行了一个字符串操作,以在另一个数组中生成新的列名。到目前为止,一切都很好。

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 中的 qcolumn:
----> 2 dfnumqcut = pd.qcut(dfnum[[column]],5)
3 dfnum[qcolumn] = dfnumqcut.codes

TypeError: unhashable type: 'numpy.ndarray'

【问题讨论】:

    标签: python pandas multidimensional-array dataframe


    【解决方案1】:

    我认为您可以使用 enumerateqcolumns 按位置选择值:

    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)
    

    更简单的解决方案 - if loop DataFrame if loop columns values:

    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
    

    【讨论】:

    • 如果我的回答有帮助,别忘了accept。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    相关资源
    最近更新 更多