Pandas :将权重应用于另一列,仅适用于某些 id

厄德拉姆

让我们以这个示例数据框和这个 ids 列表为例:

df=pd.DataFrame({'Id':['A','A','A','B','C','C','D','D'], 'Weight':[50,20,30,1,2,8,3,2], 'Value':[100,100,100,10,20,20,30,30]})

  Id  Weight  Value
0  A      50    100
1  A      20    100
2  A      30    100
3  B       1     10
4  C       2     20
5  C       8     20
6  D       3     30
7  D       2     30

L = ['A','C']

值列对于 Id 列中的每个 id 具有相同的值。对于 L 的特定 id,我想将 Weight 列的权重应用于 Value 列。我目前正在做以下方式,但我真正的大数据框非常慢:

for i in L :
    df.loc[df["Id"]==i,"Value"] = (df.loc[df["Id"]==i,"Value"] * df.loc[df["Id"]==i,"Weight"] / 
    df[df["Id"]==i]["Weight"].sum())

我怎么能有效地做到这一点?

预期输出:

  Id  Weight  Value
0  A      50     50
1  A      20     20
2  A      30     30
3  B       1     10
4  C       2      4
5  C       8     16
6  D       3     30
7  D       2     30
耶斯列

想法是只工作了过滤行Series.isinGroupBy.transformsum每与像原数据帧大小相同组总和:

L = ['A','C']

m = df['Id'].isin(L)
df1 = df[m].copy()
s = df1.groupby('Id')['Weight'].transform('sum')
df.loc[m, 'Value'] = df1['Value'].mul(df1['Weight']).div(s)

print (df)
  Id  Weight  Value
0  A      50   50.0
1  A      20   20.0
2  A      30   30.0
3  B       1   10.0
4  C       2    4.0
5  C       8   16.0
6  D       3   30.0
7  D       2   30.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Pandas:通过将函数应用于另一列的值过滤列?

如何基于应用于另一列的条件设置pandas DataFrames列值

按年份分组并将功能应用于另一列-Python,Pandas

React / Webpack将样式应用于标签,但不适用于类/ id

将函数应用于pandas中数据框的每一列

是否将函数应用于pandas数据框的每一列而没有for循环?

Python Pandas:如果在另一列中满足条件,则将方法应用于列

将加权平均函数应用于pandas groupby对象中的列,但权重总和为零

如何将公式仅应用于Pandas数据透视表的某些行?

Pandas:如何将复杂函数应用于数据框的一列,另外两列作为函数的输入?

Pandas groupby 适用于一列并保留其他列

如何根据另一个列中的值将函数应用于Pandas中的列?

将Python函数应用于一个pandas列,并将输出应用于多个列

apply()应用于ExcelFile每个数据框的每一列,Pandas

如何使用pandas Groupby将不同的聚合函数应用于同一列

DataFrame Split On Rows 并使用 Python Pandas 应用于标题一列

将函数应用于 Pandas 数据帧的某些列组

将pandas to_numeric()应用于数据框中的某些列

setAlpha适用于所有具有相同资源ID的Drawable,我如何仅适用于某些资源?

Laravel with() 仅适用于第一条记录(仅适用于 ID 为 1 的记录)

使用 Args 将函数应用于多个 Pandas 列

Pandas:将函数应用于行,写入新列

按列将函数应用于Pandas数据框

将Python函数应用于多个Pandas列

将函数应用于不接受NaN的pandas列

将大写应用于pandas数据框中的列

将 apply() 函数应用于 Pandas 中的多列?

将函数应用于pandas数据框中的列

将loc应用于2列值的Pandas