从其他列中的加权值创建新的 pandas 列
Creating new pandas column from weighted values in other columns
我正在尝试通过对前面各列中的加权值求和来创建一个新列。
例子
v1 v2 v3
1 2 3
4 3 6
3 2 1
weights = [0.801,0.796,0.637]
我想将 v1 乘以权重 [0],然后将 v2 乘以权重 [1] 等,然后创建一个新列,即这些操作的总和
这样输出就是
v1 v2 v3 v_tot
0.801 1.592 -1.911 0.482
3.204 2.388 -3.822 1.77
2.403 1.592 -0.637 3.358
我试过重做一个新的 df
data2 = data3.mul(weights_a)
这有效,但是当我尝试创建一个新列时
data2['v_tot'] = data2.loc[:,:].sum()
新列已创建,但其中充满了 nan 值。
有人可以提供一些建议吗?
尝试:
data2['v_tot'] = data2.sum(axis=1)
s = """
v1 v2 v3
1 2 3
4 3 6
3 2 1
"""
df = pd.read_csv(pd.compat.StringIO(s), delim_whitespace=True)
weights = [0.801,0.796,0.637]
df['v_tot'] = (df * weights).sum(axis=1)
df
输出:
v1 v2 v3 v_tot
0 1 2 3 4.304
1 4 3 6 9.414
2 3 2 1 4.632
P.S。如果你也想拥有一个带有加权值的 DataFrame:
dfw = df * weights
dfw['v_tot'] = dfw.sum(axis=1)
dfw
输出:
v1 v2 v3 v_tot
0 0.801 1.592 1.911 4.304
1 3.204 2.388 3.822 9.414
2 2.403 1.592 0.637 4.632
(不确定为什么 v3
中有负值)尝试:
df_new=df.mul(weights,axis=1)
df_new['v_tot']=df_new.sum(axis=1)
print(df_new)
v1 v2 v3 v_tot
0 0.801 1.592 1.911 4.304
1 3.204 2.388 3.822 9.414
2 2.403 1.592 0.637 4.632
我正在尝试通过对前面各列中的加权值求和来创建一个新列。
例子
v1 v2 v3
1 2 3
4 3 6
3 2 1
weights = [0.801,0.796,0.637]
我想将 v1 乘以权重 [0],然后将 v2 乘以权重 [1] 等,然后创建一个新列,即这些操作的总和
这样输出就是
v1 v2 v3 v_tot
0.801 1.592 -1.911 0.482
3.204 2.388 -3.822 1.77
2.403 1.592 -0.637 3.358
我试过重做一个新的 df
data2 = data3.mul(weights_a)
这有效,但是当我尝试创建一个新列时
data2['v_tot'] = data2.loc[:,:].sum()
新列已创建,但其中充满了 nan 值。
有人可以提供一些建议吗?
尝试:
data2['v_tot'] = data2.sum(axis=1)
s = """
v1 v2 v3
1 2 3
4 3 6
3 2 1
"""
df = pd.read_csv(pd.compat.StringIO(s), delim_whitespace=True)
weights = [0.801,0.796,0.637]
df['v_tot'] = (df * weights).sum(axis=1)
df
输出:
v1 v2 v3 v_tot
0 1 2 3 4.304
1 4 3 6 9.414
2 3 2 1 4.632
P.S。如果你也想拥有一个带有加权值的 DataFrame:
dfw = df * weights
dfw['v_tot'] = dfw.sum(axis=1)
dfw
输出:
v1 v2 v3 v_tot
0 0.801 1.592 1.911 4.304
1 3.204 2.388 3.822 9.414
2 2.403 1.592 0.637 4.632
(不确定为什么 v3
中有负值)尝试:
df_new=df.mul(weights,axis=1)
df_new['v_tot']=df_new.sum(axis=1)
print(df_new)
v1 v2 v3 v_tot
0 0.801 1.592 1.911 4.304
1 3.204 2.388 3.822 9.414
2 2.403 1.592 0.637 4.632