(完全披露这与我提出的另一个问题有关,所以如果我应该将它附加到我之前写的内容上,请耐心等待,即使问题不同。)
我有一个由一列权重和列组成的数据框,其中包含二进制值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())
答案 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']))