有没有一种方法可以遍历数据框并根据列表在新列中分配值?

时间:2020-08-22 21:28:23

标签: python pandas list dataframe

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

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

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

仅当(col2中的)标志为1时,才使用列表值更新新列。 如果flag为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无效。

1 个答案:

答案 0 :(得分:3)

让我们尝试

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