(完全披露这与我问的另一个问题有关,所以请原谅我是否应该把它附加到我之前写的内容中,即使问题不同。)
我有一个由一列权重和包含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())
可以使用“mul”方法将列相乘。但是,如果您确实想使用apply,请记住以下几点:
apply函数将dataframe中的每个序列传递给函数。这个循环是apply函数固有的。因此,首先要说的是,函数中的循环是多余的。此外,它内部还有一个return语句,它会导致您不希望出现的行为。在
如果每个列都自动作为参数传递,则只需告诉函数将其乘以什么即可。在这个例子中,你的权重系列。在
下面是一个使用apply的实现。当然,这里不可取的是权重也会被自身乘以:
for循环中有} 方法和正确的
return
语句,这意味着for循环只执行一次,要将数据帧与列相乘,可以使用^{axis
参数:read_csv
{cd2}返回{cd2}。。。不需要在上面使用
pd.DataFrame
。在mul
与axis=0
您可以使用
apply
,但这很尴尬。使用mul(axis=0)
。。。这应该是你所需要的。在?
你说看起来你只是用权重列来代替?其他栏目都是吗?在
相关问题 更多 >
编程相关推荐