首页 > 解决方案 > 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 添加到column2ifcolumn1是 1 和 2 到所有column2column12 .... 所以我应该得到:

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]

我究竟做错了什么?我该如何解决?

标签: pythonpandasloops

解决方案


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

推荐阅读