我有一个包含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无效。
答案 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