python - Pandas 通过迭代根据列表项的其他列值设置列值
问题描述
我正在尝试根据另一个列值设置 pandas 列的值。新值应该通过迭代一个列表来设置,该列表的长度与唯一值相同col1
例子:
d = {'col1': [1, 2,2,2,3,3,4], 'col2': [1,1,1,1,1,1,1]}
df = pd.DataFrame(data=d)
items_to_add=[5,2,11,9]
#list has length of unique values in `column1`
现在我想将例如 5 添加到column2
ifcolumn1
是 1 和 2 到所有column2
行column1
2 .... 所以我应该得到:
col1 col2
1 5
2 2
2 2
2 2
3 11
3 11
4 9
这段代码给我一个语法错误,但我不知道为什么
items_to_add=[5,2,11,9]
for i in range(len(items_to_add)):
df['col2'][df.col1[i]] = items_to_add[i]
我究竟做错了什么?我该如何解决?
解决方案
col1
您可以通过创建字典来简单地替换值,即
di = dict(zip(df['col1'].unique(), items_to_add))
# {1: 5, 2: 2, 3: 11, 4: 9}
df['col3'] = df['col1'].map(di)
col1 col2 col3
0 1 1 5
1 2 1 2
2 2 1 2
3 2 1 2
4 3 1 11
5 3 1 11
6 4 1 9
推荐阅读
- javascript - 加载页面后添加什么事件监听器来执行一段代码?
- c# - 在 Unity 中,当我的正方形与圆形碰撞时,我想摧毁它
- reactjs - 在对象数组上反应 setState
- javascript - 模板字符串不适用于 AJAX 请求中的链接?
- c# - 不使用 LINQ 的 C# 中的 Delete() 和 Update() 函数
- ios - 如何连续关闭,然后为覆盖在同一视图上的多个面板视图打开一个新面板(如果一开始是活动的)?
- arrays - 根据两个值阈值过滤列
- javascript - 如何在javascript中查找数组中重复出现的次数最多的项目
- c - OpenSSL 缺少密码?与 dog.ceo 的 SSL 连接
- node.js - 如何使用nodejs在mongo db的数组中插入键值对?