如何将列表与DataFrame执行inner merge(内连接)合并?
解决方案
首先先修正一个小问题:别用list当变量名,会覆盖Python内置的list类型,后续容易出问题。下面直接给两种可行的实现方式:
先把数据转成真正的DataFrame(如果还没转的话)
你的原始数据是嵌套列表,先转成pandas的DataFrame方便操作:
import pandas as pd # 原始数据 raw_data = [[[1,2,3],'a'],[[4,5],'b'],[[6,7,8],'c']] match_list = [[1,2,3],[4,5]] # 转为DataFrame df = pd.DataFrame(raw_data, columns=['data_col', 'label_col'])
方法一:用isin直接筛选(最简单)
直接筛选data_col列里存在于match_list中的行,再转回嵌套列表:
# 筛选符合条件的行 filtered_rows = df[df['data_col'].isin(match_list)] # 转回你要的嵌套列表格式 result = filtered_rows.values.tolist() print(result) # 输出:[[[1, 2, 3], 'a'], [[4, 5], 'b']]
方法二:转元组后执行Merge(适合复杂场景)
如果后续需要更复杂的连接逻辑,可以把不可哈希的列表转成可哈希的元组,再用merge做内连接:
# 把df里的列表转成元组 df['data_tuple'] = df['data_col'].apply(tuple) # 把匹配列表也转成元组的DataFrame match_df = pd.DataFrame({'data_tuple': [tuple(item) for item in match_list]}) # 内连接 merged_df = pd.merge(df, match_df, on='data_tuple', how='inner') # 保留需要的列并转回嵌套列表 result = merged_df[['data_col', 'label_col']].values.tolist() print(result) # 输出:[[[1, 2, 3], 'a'], [[4, 5], 'b']]
内容的提问来源于stack exchange,提问作者SmackCat
相关产品推荐
相关产品推荐

