Python 使用Numpy在数据帧上应用权重公式

Python 使用Numpy在数据帧上应用权重公式,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有一个数据帧,希望将单元格的浮点值除以它所在行的总和。为此,我使用了numpy公式。因此,这将为该行的该单元格提供权重。我有这个数据帧df1: AA-AB-AC-AD 2005-01-02 23:55:00“权益” 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

我有一个数据帧,希望将单元格的浮点值除以它所在行的总和。为此,我使用了numpy公式。因此,这将为该行的该单元格提供权重。我有这个数据帧
df1

AA-AB-AC-AD
2005-01-02 23:55:00“权益”
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  
到目前为止,我已经尝试了以下方法:

import numpy as np

def foo_bar(x):
    if type(x) is not str:
        return x / np.sum(df1, axis=1)
    else:
        return

df = df_numeric.apply(np.vectorize(foo_bar))
由于出现以下错误,我的公式的求和部分似乎写得不正确:

AA-AB-AC-AD
ValueError:(“使用序列设置数组元素”。,“在索引AA处发生”)

在这种情况下,消息错误提供了大量信息:您正在尝试使用序列设置数组元素(x)。

尝试在Python提示符中加载数据帧
df1
,并打印表达式
np.sum(df1,axis=1)
:它返回一个序列-一个向量-包含每行的和。在每种情况下,您都需要选择该序列中对应于适当行的元素

如前所述,您可以尝试以下操作:

df1.div(df1.sum(轴=1,轴=0)

div
将在数据帧中应用元素分割


从您的
df1
代码片段中,似乎有带字符串的行(
“EQUITY”
)与带数字的行交替出现,这会给您带来问题。我建议您去掉任何字符串行,只留下一个带有数字的数据帧。您可以使用列标题为数据框中的列指定有效名称。

在这种情况下,消息错误提供了大量信息:您正在尝试使用序列设置数组元素(x)。

尝试在Python提示符中加载数据帧
df1
,并打印表达式
np.sum(df1,axis=1)
:它返回一个序列-一个向量-包含每行的和。在每种情况下,您都需要选择该序列中对应于适当行的元素

如前所述,您可以尝试以下操作:

df1.div(df1.sum(轴=1,轴=0)

div
将在数据帧中应用元素分割


从您的
df1
代码片段中,似乎有带字符串的行(
“EQUITY”
)与带数字的行交替出现,这会给您带来问题。我建议您去掉任何字符串行,只留下一个带有数字的数据帧。您可以使用列标题为数据框中的列指定重要名称。

请尝试以下代码,该代码使用pandas功能,而不是显式函数

该函数执行按元素的除法。将总和作为一个系列输入该函数,并使用原始元素的行索引选择适当的除法值

import numpy as np
import pandas as pd

data = pd.DataFrame(np.arange(12).reshape((3, 4)),columns=['A', 'B', 'C', 'D']) 

data['Total'] = data.sum(axis=1)

data_new= data.iloc[:, :-1].div(data["Total"], axis=0)

print data  
print data_new  
结果:

   A  B   C   D  Total
0  0  1   2   3      6
1  4  5   6   7     22
2  8  9  10  11     38
          A         B         C         D
0  0.000000  0.166667  0.333333  0.500000
1  0.181818  0.227273  0.272727  0.318182
2  0.210526  0.236842  0.263158  0.289474

尝试下面的代码,它使用pandas特性而不是显式函数

该函数执行按元素的除法。将总和作为一个系列输入该函数,并使用原始元素的行索引选择适当的除法值

import numpy as np
import pandas as pd

data = pd.DataFrame(np.arange(12).reshape((3, 4)),columns=['A', 'B', 'C', 'D']) 

data['Total'] = data.sum(axis=1)

data_new= data.iloc[:, :-1].div(data["Total"], axis=0)

print data  
print data_new  
结果:

   A  B   C   D  Total
0  0  1   2   3      6
1  4  5   6   7     22
2  8  9  10  11     38
          A         B         C         D
0  0.000000  0.166667  0.333333  0.500000
1  0.181818  0.227273  0.272727  0.318182
2  0.210526  0.236842  0.263158  0.289474