【问题标题】:Pandas how to duplicate and add new column with values based off two columnsPandas 如何使用基于两列的值复制和添加新列
【发布时间】:2020-09-20 03:03:35
【问题描述】:
我有一个名为比赛的数据框
有两列我感兴趣
TST = 总拍摄次数
SM = 投篮次数
我想复制这个名为比赛的数据框并创建一个新的列来划分 SM/TST
我正在使用 pandas 和 numpy。制作数据框的新副本的步骤。将新列添加到重复数据帧中,此计算称为 shotperc = shot percent 将非常有帮助。我这周才开始使用 Jupyter Notebooks。
【问题讨论】:
标签:
python
pandas
dataframe
jupyter
【解决方案1】:
有很多方法可以实现你想要的。
- 复制原始数据框,存储到一个新变量中,将新列分配给这个新变量。
new_contest = contest.copy()
new_contest["shot_percent"] = new_contest["shots_made"] / new_contest["shots_taken"]
print(new_contest)
shots_taken shots_made shot_percent
0 90 45 0.50
1 100 50 0.50
2 200 150 0.75
3 80 60 0.75
4 50 10 0.20
- 使用
assign 方法,该方法隐式执行 copy 以确保您的原始数据帧保持不变。
new_contest = contest.assign(shot_percent=lambda df: df["shots_made"] / df["shots_taken"])
print(new_contest)
shots_taken shots_made shot_percent
0 90 45 0.50
1 100 50 0.50
2 200 150 0.75
3 80 60 0.75
4 50 10 0.20
- 可能是最不常见的选项,但请使用
eval DataFrame 方法,该方法还隐式复制原始数据帧以确保您的原始数据不会更改。这也是 imo 可读性最高的结果。
new_contest = contest.eval("shot_percent = shots_made / shots_taken")
print(new_contest)
shots_taken shots_made shot_percent
0 90 45 0.50
1 100 50 0.50
2 200 150 0.75
3 80 60 0.75
4 50 10 0.20
以上方法都不会改变你原来的数据框,希望对你有帮助!