python - Pandas - 根据其他列中的值将数据添加到列
问题描述
所以我基本上得到了这个。.csv 文件:
,year,team,tr_diff,ranking
0,2010,ADO Den Haag,3.9473684210526314,N/A
1,2011,ADO Den Haag,1.5120274914089347,N/A
2,2012,ADO Den Haag,-1.2320328542094456,N/A
3,2013,ADO Den Haag,-3.757828810020877,N/A
这是我的代码:
rankings = [('ADO Den Haag', 12, 2010), ('ADO Den Haag', 16, 2011), .... ('ADO Den Haag', 12, 2013)]
df = pd.read_csv('preliminary.csv')
for tuple in rankings:
df.loc[(df['team'] == tuple[0]) & (df['year'] == tuple[2]), 'ranking'] = tuple[1]
目标是找到具有正确团队名称和年份的列,并将可以在元组的第二项中找到的排名添加到“排名”列中的该行。我怎样才能做到这一点?此代码不会引发任何错误,但它没有做我想要的。我希望的行为是这样的。
,year,team,tr_diff,ranking
0,2010,ADO Den Haag,3.9473684210526314,12
1,2011,ADO Den Haag,1.5120274914089347,16
2,2012,ADO Den Haag,-1.2320328542094456,14
3,2013,ADO Den Haag,-3.757828810020877,15
4,2014,ADO Den Haag,2.5974025974025974,11
5,2015,ADO Den Haag,3.4702549575070822,8
6,2016,ADO Den Haag,-4.3626448534424,12
我究竟做错了什么?
解决方案
您不需要遍历元组列表。使用.merge()代替。假设rankings
每个条目都有一个条目,df
您需要:
ranking_df = pd.DataFrame(rankings, columns=['team', 'ranking', 'year'])
new_df = df.drop(['ranking'], axis=1).merge(ranking_df, on=['team', 'year'], how='left')
输入:
year team tr_diff ranking
0 2010 ADO Den Haag 3.947368 NaN
1 2011 ADO Den Haag 1.512027 NaN
2 2012 ADO Den Haag -1.232033 NaN
3 2013 ADO Den Haag -3.757829 NaN
输出:
year team tr_diff ranking
0 2010 ADO Den Haag 3.947368 12.0
1 2011 ADO Den Haag 1.512027 16.0
2 2012 ADO Den Haag -1.232033 NaN
3 2013 ADO Den Haag -3.757829 NaN
推荐阅读
- python - 如何提取下面红色带下划线的值并将其保存为列表?
- javascript - 按具有条件和自定义键的对象数组分组
- javascript - 消除重复
- azure - 如何在 Azure Devops 发布管道中使用 PowerShell 设置环境变量?
- python - 用新方法动态包装任意类
- javascript - Blazor wasm 项目中单击事件时出错
- python - 如何使用 RGB 图像数组的 PyTorch 张量在 colab 中显示视频?
- c++ - 我怎样才能让我的代码不输出无效和 DQed 运动员的分数?
- java - 将特定格式的Java long类型值转换为秒/毫秒
- apache-kafka-connect - Debezium 属性 snapshot.new.tables 不工作