pandas - 根据其他两列向新列添加值
问题描述
我有一个看起来像这样的数据框。我创建了 3 个新列,它们将从其他列中获取值。我希望函数列将列分开,并为每个用户获取每个函数的总小时数。
User Function Total hours Damage Processing problem solve damages sweeper
schae Damage Processing 9.36
Julie Problem solve 9.70
John sweeper 18.9
Dan Damages 1.83
Dan Damages 1.83
Julie Damages 1.83
Dan Problem solve 1.83
预期的输出看起来像
User Function Total hours Damage Processing problem solve damages sweeper
schae Damage Processing 9.36 9.36
Julie Problem solve 9.70 9.70
John sweeper 18.9 18.9
Dan Damages 1.83 1.83
Dan sweeper 1.83 1.83
Julie Damages 1.83 1.83
Dan Problem solve 1.83 1.83
我想到了 pd.melt 但它抛出了一个错误值 var not present
res = pd.melt(result,id_vars = ['Function'],value_vars=['Total hours'])
解决方案
这是一种使用get_dummies
and的方法df.assign
:
out = (df[['User','Function','Total hours']].assign(**pd.get_dummies(df['Function'])
.mul(df['Total hours'],axis=0).replace(0,np.nan)))
print(out)
User Function Total hours Damage Processing Damages \
0 schae Damage Processing 9.36 9.36 NaN
1 Julie Problem solve 9.70 NaN NaN
2 John sweeper 18.90 NaN NaN
3 Dan Damages 1.83 NaN 1.83
4 Dan Damages 1.83 NaN 1.83
5 Julie Damages 1.83 NaN 1.83
6 Dan Problem solve 1.83 NaN NaN
Problem solve sweeper
0 NaN NaN
1 9.70 NaN
2 NaN 18.9
3 NaN NaN
4 NaN NaN
5 NaN NaN
6 1.83 NaN
推荐阅读
- python - 在 dask.Array 任务图中嵌入计算前/计算后操作
- javascript - 在页面上获取视频的位置 – JS
- mysql - mysql中的IF函数
- javascript - 道具'coordinate.longitude'在'MapMarker'中被标记为必需,但它的值是未定义的
- python - Groupby & Sum - 使用添加的 If 条件创建新列
- c# - CreateInstance 在运行时使用管道失败
- c++ - 潜在的内存泄漏,获取子向量
- function - 如何在控制器Codeginiter 4中调用同一类中的函数
- ruby - 在 MAC 上安装 ruby 3.0.2 时出错:运行时出错 '__rvm_make -j8' 错误
- pine-script - 找不到函数或函数引用“ema”