首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pandas数据框使用分区数据添加新的计算字段

Pandas数据框使用分区数据添加新的计算字段
EN

Stack Overflow用户
提问于 2019-03-15 08:37:55
回答 1查看 43关注 0票数 0

我正在尝试添加一个新的计算字段。我正在尝试Adding calculated column(s) to a dataframe in pandas的第二个最好的答案,因为在我看来它是最好的,因为它很整洁。请随时提供更好的替代方案。

无论哪种方式,我的初始代码如下:

import pandas as pd    

#https://github.com/sivabalanb/Data-Analysis-with-Pandas-and-Python/blob/master/nba.csv
dt_nba = pd.read_csv("data//nba.csv")  

#note this is just basic function.  I want to pass partitioned data like team's average salary
def GetSalaryIncrement(val):
    return val * 1.1

dt_nba["SalaryPlus10Percent"] = map(GetSalaryIncrement,dt_nba["Salary"])

dt_nba[["Name","Team","Salary","SalaryPlus10Percent"]][:5]

然而,结果并不是我所期望的:

+----+---------------+----------------+--------------+--------------------------------+
| ID |     Name      |      Team      |    Salary    |      SalaryPlus10Percent       |
+----+---------------+----------------+--------------+--------------------------------+
|  0 | Avery Bradley | Boston Celtics | 7730337.0000 | <map object at 0x7fb819e9b7b8> |
|  1 | Jae Crowder   | Boston Celtics | 6796117.0000 | <map object at 0x7fb819e9b7b8> |
|  2 | John Holland  | Boston Celtics | nan          | <map object at 0x7fb819e9b7b8> |
|  3 | R.J. Hunter   | Boston Celtics | 1148640.0000 | <map object at 0x7fb819e9b7b8> |
|  4 | Jonas Jerebko | Boston Celtics | 5000000.0000 | <map object at 0x7fb819e9b7b8> |
+----+---------------+----------------+--------------+--------------------------------+

特别是,我对传递“窗口/聚合数据”感兴趣,因为它应该优雅地忽略NAN值。

在T-SQL中,我可以这样做:

-- INCREASE EACH PLAYERS SALARY BY 10% OF AVERAGE SALARY OF THE TEAM
SELECT NewSalary= Salary + (.1 * AVG(Salary) OVER (PARTITION BY Team))
FROM nba_data

如果可能的话,我想在Pandas中做到这一点。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-15 08:44:05

我想你要找的是

dt_nba["Salary"]=dt_nba["Salary"].map(GetSalaryIncrement)

此外,您还可以使用

GetSalaryIncrement(dt_nba["Salary"])

dt_nba["Salary"].apply(GetSalaryIncrement) 

到计算的INCREASE EACH PLAYERS SALARY BY 10% OF AVERAGE SALARY OF THE TEAM

dt_nba['Newsa']=dt_nba.groupby('Team')['Salary'].transform('mean')*0.1+dt_nba["Salary"]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55173994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档