python - Python组合整数列以创建带后缀的多个列
问题描述
我有一个包含员工调查结果样本的数据框,如下所示。delta 列中的值只是 FY21 和 FY20 列之间的差异。
Employee leadership_fy21 leadership_fy20 leadership_delta comms_fy21 comms_fy20 comms_delta
patrick.t@abc.com 88 50 38 90 80 10
johnson.g@abc.com 22 82 -60 80 90 -10
pamela.u@abc.com 41 94 -53 44 60 -16
yasmine.a@abc.com 90 66 24 30 10 20
我想创建多个列。包含 fy21 值中的 % ii。将其与具有 delta 后缀的列合并,使 delta 值位于 () 中。
示例输出为:
Employee leadership_fy21 leadership_delta leadership_final comms_fy21 comms_delta comms_final
patrick.t@abc.com 88 38 88% (38) 90 10 90% (10)
johnson.g@abc.com 22 -60 22% (-60) 80 -10 80% (-10)
pamela.u@abc.com 41 -53 41% (-53) 44 -16 44% (-16)
yasmine.a@abc.com 90 24 90% (24) 30 20 30% (20)
我已经尝试了以下代码,但它似乎不起作用。这可能与 numpy 无法组合字符串有关。感谢我能得到的任何形式的帮助,谢谢。
#create a list of all the rating columns
ratingcollist = ['leadership','comms','wellbeing','teamwork']
#create a for loop to get all the columns that match the column list
for rat in ratingcollist:
cols = df.filter(like=rat).columns
fy21cols = df[cols].filter(like='_fy21').columns
deltacols = df[cols].filter(like='_delta').columns
if len(cols) > 0:
df[f'{rat.lower()}final'] = (df[fy21cols].values.astype(str) + '%' + '(' + df[deltacols].values.astype(str) + ')')
解决方案
你可以这样做:
def yourfunction(ratingcol):
x=df.filter(regex=f'{ratingcol}(_delta|_fy21)')
fy=x.filter(regex='21').iloc[:,0].astype(str)
delta=x.filter(regex='_delta').iloc[:,0].astype(str)
return(fy+"%("+delta+")")
yourfunction('leadership')
0 88%(38)
1 22%(-60)
2 41%(-53)
3 90%(24)
然后,使用 for 循环,您可以创建列
for i in ratingcollist:
df[f"{i}_final"]=yourfunction(i)
推荐阅读
- random-forest - h2o DRF 中权重列的影响
- c# - 如何将额外的 Azure Blob 存储输出添加到 ImageResizer functionapp?
- c# - WPF:在应用 ScaleTransform 时换行文本
- r - 在使用过滤器时使用 get() 按列分组在某些情况下不起作用
- firebase - 使用firebase推送通知中的onTokenRefresh与getToken有什么区别?
- html - 在视图中使用 application.conf 属性 Play Scala
- html - CSS 在元素之间平均划分空白,但使用最大空间
- c# - C# 中的文件监视 (.Net Core)
- node.js - 如何将 Azure Httptrigger 连接到网站?
- azure - 重新启动 Azures Kubernetes Cluster VM 会导致 GPU 问题