首页 > 解决方案 > 遍历 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

标签: pythonpandaslistfor-looptuples

解决方案


你可以用它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


推荐阅读