gpt4 book ai didi

python - Pandas 数据框合并和元素范围乘法

转载 作者:行者123 更新时间:2023-11-30 23:21:11 27 4
gpt4 key购买 nike

我有一个像这样的数据框

df1 = pd.DataFrame({'name':['al', 'ben', 'cary'], 'bin':[1.0, 1.0, 3.0], 'score':[40, 75, 15]})

bin name score
0 1 al 40
1 1 ben 75
2 3 cary 15

和一个类似的数据框

df2 = pd.DataFrame({'bin':[1.0, 2.0, 3.0, 4.0, 5.0], 'x':[1, 1, 0, 0, 0], 
'y':[0, 0, 1, 1, 0], 'z':[0, 0, 0, 1, 0]})

bin x y z
0 1 1 0 0
1 2 1 0 0
2 3 0 1 0
3 4 0 1 1
4 5 0 0 0

我想要做的是用“x”、“y”和“z”列扩展 df1,并仅在 bin 匹配的位置以及相应的“x”、“y”、“z”处填充分数' 值为 1,而不是 0。

我已经做到了 df3 = pd.merge(df1, df2, how='left', on=['bin'])

    bin     name    score   x   y   z
0 1 al 40 1 0 0
1 1 ben 75 1 0 0
2 3 cary 15 0 1 0

但我没有看到一种优雅的方法将分数值放入正确的“x”、“y”等列中(我的现实生活问题有一百多个这样的列,所以 df3['x'] = df3['score'] * df3['x'] 可能会相当慢)。

最佳答案

您只需获取要乘以分数的列的列表,然后使用 apply 函数即可:

cols = [each for each in df2.columns if each not in ('name', 'bin')]
df3 = pd.merge(df1, df2, how='left', on=['bin'])
df3[cols] = df3.apply(lambda x: x['score'] * x[cols], axis=1)

关于python - Pandas 数据框合并和元素范围乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25066316/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com