将列乘以数据框中的另一列

时间:2017-05-15 14:30:40

标签: python pandas numpy dataframe

(完全披露这与我提出的另一个问题有关,所以如果我应该将它附加到我之前写的内容上,请耐心等待,即使问题不同。)

我有一个由一列权重和列组成的数据框,其中包含二进制值0和1.我想将数据框中的每一列乘以权重列。但是,我似乎用重量列替换了数据框中的每一列。我敢肯定我在这里错过了一些令人难以置信的愚蠢/基本的东西 - 我对熊猫和蟒蛇整体都是新手。我做错了什么?

celebfile = pd.read_csv(celebcsv)
celebframe = pd.DataFrame(celebfile) 
behaviorfile = pd.read_csv(behaviorcsv)
behaviorframe = pd.DataFrame(behaviorfile)
celebbehavior = pd.merge(celebframe, behaviorframe, how ='inner', on = 'RespID')
celebbehavior2 = celebbehavior.copy()
def multiplycolumns(column):
    for column in celebbehavior:
        return celebbehavior[column]*celebbehavior['WEIGHT']
celebbehavior2 = celebbehavior2.apply(lambda column: multiplycolumns(column), axis=0)
print(celebbehavior2.head())

3 个答案:

答案 0 :(得分:2)

for循环中有return语句,这意味着for循环只执行一次,要将数据帧与列相乘,可以使用mul方法使用正确的{{1参数:

axis

答案 1 :(得分:1)

<强> while(scan.hasNextInt()){ a.add(scan.nextInt()); }
返回read_csv ...无需在其上使用pd.DataFrame

pd.DataFrame mul
您可以使用axis=0,但这很尴尬。使用apply ...这应该就是您所需要的。

mul(axis=0)

<强> df = pd.read_csv(celebcsv).merge(pd.read_csv(behaviorcsv), on='RespID') df = df.mul(df.WEIGHT, 0)
你说你看起来只是用重量列替换?你是其他专栏吗?

答案 2 :(得分:1)

你可以使用`mul'方法来乘以列。但是,如果您确实想要使用申请,您可以牢记以下内容:

apply函数将数据框中的每个系列传递给函数。这种循环是apply函数所固有的。因此首先要说的是你的函数循环是多余的。你的内部也有一个return语句,它会导致你不想要的行为。

如果每个列都自动作为参数传递,那么您需要做的就是告诉函数乘以它的乘法。在这种情况下你的权重系列。

这是使用apply的实现。当然,这里不受欢迎的是权重本身也是多重的:

df = pd.DataFrame({'1' : [1, 1, 0, 1], 
                   '2' : [0, 0, 1, 0], 
                   'weights' : [0.5, 0.25, 0.1, 0.05]})

def multiply_columns(column, weights):
    return column * weights

df.apply(lambda x: multiply_columns(x, df['weights']))