将数据帧中的列与另一列相乘

2024-10-01 09:27:05 发布

您现在位置:Python中文网/ 问答频道 /正文

(完全披露这与我问的另一个问题有关,所以请原谅我是否应该把它附加到我之前写的内容中,即使问题不同。)

我有一个由一列权重和包含0和1的二进制值的列组成的数据帧。我想将dataframe中的每一列乘以weights列。但是,我似乎在用weight列替换dataframe中的每一列。我肯定我错过了一些非常愚蠢/基本的东西——我对熊猫和Python来说还是个新手。我做错什么了?

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())

Tags: csv内容dataframereadcolumnpd权重behaviorframe
3条回答

可以使用“mul”方法将列相乘。但是,如果您确实想使用apply,请记住以下几点:

apply函数将dataframe中的每个序列传递给函数。这个循环是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']))

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

celebbehavior.mul(celebbehavior['WEIGHT'], axis=0)

read_csv
{cd2}返回{cd2}。。。不需要在上面使用pd.DataFrame。在

mulaxis=0
您可以使用apply,但这很尴尬。使用mul(axis=0)。。。这应该是你所需要的。在

df = pd.read_csv(celebcsv).merge(pd.read_csv(behaviorcsv), on='RespID')
df = df.mul(df.WEIGHT, 0)

?
你说看起来你只是用权重列来代替?其他栏目都是吗?在

相关问题 更多 >