首页 > 解决方案 > 有没有办法遍历数据框并根据列表在新列中分配一个值?

问题描述

我有一个包含 2 列的数据框,我想添加一个新列;

应根据我拥有的列表更新此新列:

list = [0,1,2,3,6,7,9,10]

如果标志(在 col2 中)为 1,则仅使用列表值更新新列。如果标志为 0,则不填充新列中的行。

当前 DF

+-------------+---------+
| context     | flag    |
+-------------+---------+
| 0           |       1 |
| 0           |       1 |
| 0           |       0 |
| 2           |       1 |
| 2           |       1 |
| 2           |       1 |
| 2           |       1 |
| 2           |       0 |
| 4           |       1 |
| 4           |       1 |
| 4           |       0 |
+-------------+---------+

所需的DF

+-------------+---------+-------------+
| context     | flag    | new_context |
+-------------+---------+-------------+
| 0           |       1 |           0 |
| 0           |       1 |           1 |
| 0           |       0 |             |
| 2           |       1 |           2 |
| 2           |       1 |           3 |
| 2           |       1 |           6 |
| 2           |       1 |           7 |
| 2           |       0 |             |
| 4           |       1 |           9 |
| 4           |       1 |          10 |
| 4           |       0 |             |
+-------------+---------+-------------+

现在,我遍历列表的索引并将列表值分配给 new_context 列。然后我递增浏览列表。这些值填充在正确的位置,但它们都说 0。我不相信它正确地遍历列表。

list_length = len(list)
i=0
for i in range(list_length])):  
    df["new_context"] = [list[i] if ele == 0 else "" for ele in df["flag"]]
    if df["flag"] == 0: i+=1

我也尝试遍历整个数据框,但是我认为它只是应用相同的列表值(第一个列表值为 0)

i=0
for index, row in df.iterrows():
    df["new_context"] = [list[i] if ele == 0 else "" for ele in df["flag"]]
    if row['flag'] == 0: i+=1

如何使用下一个列表值填充 flag=1 的新列?似乎 i+=1 不起作用。

标签: pythonpandaslistdataframe

解决方案


让我们试试

l = [0,1,2,3,6,7,9,10]
df['New']=''
df.loc[df.flag==1,'New']=l
df
Out[80]: 
    context  flag New
0         0     1   0
1         0     1   1
2         0     0    
3         2     1   2
4         2     1   3
5         2     1   6
6         2     1   7
7         2     0    
8         4     1   9
9         4     1  10
10        4     0    

推荐阅读