python - 有没有办法遍历数据框并根据列表在新列中分配一个值?
问题描述
我有一个包含 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 不起作用。
解决方案
让我们试试
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
推荐阅读
- postgresql - 在 Wireshark 中按表过滤 PostgreSQL 流量
- java - 选择字符串中 - 之后的字母
- android - Jackson、Kotlin 和 Proguard
- reactjs - 使用 React 组件的代理时查找失败
- vba - VBA:用户表单和用户表单中调用的宏给出不同的结果
- python - 不同超参数配置 sklearn RandomizedSearchCV 的分数值完全相同
- vba - VBA代码在它旁边查找值复制值并粘贴到不同的单元格中
- c++ - C++ libcurl - 无法从 URL 检索整个 html 内容
- quill - 新线路不是所见即所得
- jquery - 当我通过 jquery 发布时,为什么我的表单字段名称带有方括号?