Python 在整个数据帧上应用Numpy函数

Python 在整个数据帧上应用Numpy函数,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我正在数据帧df1上应用此函数,例如: AA AB AC AD 2005-01-02 23:55:00 "EQUITY" "EQUITY" "EQUITY" "EQUITY" 2005-01-03 00:00:00 32.32 19.5299 32.32 31.0455 2005-01-

我正在数据帧
df1
上应用此函数,例如:

                          AA          AB             AC           AD  
2005-01-02 23:55:00      "EQUITY"    "EQUITY"      "EQUITY"     "EQUITY"   
2005-01-03 00:00:00        32.32      19.5299        32.32      31.0455   
2005-01-04 00:00:00      31.9075      19.4487      31.9075      30.3755   
2005-01-05 00:00:00      31.6151      19.5799      31.6151       29.971   
2005-01-06 00:00:00      31.1426      19.7174      31.1426      29.9647  

def func(x):
    for index, price in x.iteritems():
      x[index] = price / np.sum(x,axis=1)
    return x[index]

df3=func(df1.ix[1:])
但是,我只返回了一列,而不是3列

    2005-01-03    0.955843
    2005-01-04    0.955233
    2005-01-05    0.955098
    2005-01-06    0.955773
    2005-01-07    0.955877
    2005-01-10     0.95606
    2005-01-11     0.95578
    2005-01-12    0.955621

我猜我在公式中遗漏了一些东西,使其应用于整个数据帧。另外,如何返回第一个行中有字符串的索引?

您需要按以下方式执行:

def func(row):
    return row/np.sum(row)
df2 = pd.concat([df[:1], df[1:].apply(func, axis=1)], axis=0)
它有两个步骤:

  • df[:1]
    提取包含字符串的第一行,而
    df[1:://code>表示数据帧的其余部分。稍后将它们连接起来,这就回答了问题的第二部分
  • 要对行进行操作,应使用
    apply()
    方法

  • 您需要按照以下方式进行操作:

    def func(row):
        return row/np.sum(row)
    df2 = pd.concat([df[:1], df[1:].apply(func, axis=1)], axis=0)
    
    它有两个步骤:

  • df[:1]
    提取包含字符串的第一行,而
    df[1:://code>表示数据帧的其余部分。稍后将它们连接起来,这就回答了问题的第二部分
  • 要对行进行操作,应使用
    apply()
    方法

  • 如果我想将总和(行)除以每个单元格中的值,我只需执行np.sum(行)/行,对吗?thnksYes。这就是你要做的。嗨,又来了,什么是罗?在你的职责范围内。似乎我的结果显示除法实际上没有发生,因为我只返回单元格中的价格,而不是除法。当您在pd.apply中应用func时,pandas将参数“row”解释为pandas DataFrame中的行。如果我想将总和(row)除以每个单元格中的值,我只需执行np.sum(row)/row,对吗?thnksYes。这就是你要做的。嗨,又来了,什么是罗?在你的职责范围内。似乎我的结果显示分割实际上没有发生,因为我只返回单元格中的价格,而不是分割。当您在pd.apply中应用func时,pandas将参数“row”解释为pandas数据框中的行