在整个Dataframe上应用Numpy函数

时间:2016-09-17 23:45:46

标签: 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-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

我猜我在公式中遗漏了一些内容,使其适用于整个数据帧。另外,我如何才能返回其行中包含字符串的第一个索引?

1 个答案:

答案 0 :(得分:2)

您需要按以下方式执行此操作:

def func(row):
    return row/np.sum(row)
df2 = pd.concat([df[:1], df[1:].apply(func, axis=1)], axis=0)

它有两个步骤:

  1. df[:1]提取第一行,其中包含字符串,而df[1:]表示DataFrame的其余部分。您稍后将它们连接起来,这将回答您问题的第二部分。
  2. 要对行进行操作,您应该使用apply()方法。