python - 遍历 pandas 数据框中的行并匹配列表中的元组并创建一个新的 df 列
问题描述
我有一个包含一列元组(df.row_col)的数据框,我需要使用元组列表进行搜索。如果列表中的元组存在于数据框列中,我想返回该行并向数据框添加一个新列。我尝试了这个列表理解,但我不确定我是否可以遍历这样的列表。非常感谢帮助!
data_tuples=
[(7, 45),
(13, 34),
(17, 51),
(17, 52),
(17, 53),
(17, 54),
(17, 55),
(18, 50)]
Dataframe to search:
index farm layer row column Qmax row_col
0 1 1 3 7 36 0.0 (7, 36)
1 2 1 3 7 37 0.0 (7, 37)
2 3 1 3 8 35 0.0 (8, 35)
3 4 1 3 8 36 0.0 (8, 36)
4 5 1 3 8 37 0.0 (8, 37)
for tup in data_tuples:
new_df = df[df["row_col"].apply(lambda x: True if tup in x else False)]
return new_df
解决方案
你可以用它Series.map(...)
来完成你想做的事情。首先,您可以根据元组是否存在创建布尔掩码(True/False 列)data_tuples
:
tuple_present_in_list = df["row_col"].map(lambda x: x in data_tuples)
然后,您可以将原始 DataFrame 过滤到仅这些行(如果这是您想要做的):
new_df = df[tuple_present_in_list]
这里的关键是.map()
将您的逻辑应用于单个列(这是一个熊猫系列)以检查每个“row_col”值以查看它是否在您的元组列表中。
这是关于apply和map之间区别的另一个答案:Difference between map, applymap and apply methods in Pandas
这是熊猫文档.map()
:https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.map.html
推荐阅读
- css - Bootstrap 4 模态样式(FlexBox)在 IE 中不起作用
- android-studio - “在颤振项目的单元测试中调试”
- node.js - NuxtJS 使用 UglifyJS 和 node-rsa 构建中断。我该如何解决这个问题?
- php - Laravel 创建与保存方法
- autohotkey - Ahk 脚本在当前文件夹中查找具有最新更改的文件或文件夹?
- angular6 - How to fix ngFor each row clickStatus value change when click on that row only
- z3 - 对中位数的约束
- python - Iterating over a data frame and replacing value depending on a condition
- java - Couchbase - Auto generate key with user defined suffix
- spring - Openshift/Kubernetes 中的 Spring Boot 执行器健康检查