首页 > 解决方案 > 如何比较 python 中的一些列表并将它们添加到数据框中?

问题描述

我有四个列表包含不同的数字,如下所示:

list1 = [399826, 399827, 413350, 404450, 399827, 404451]  
list2 = [399825, 399826, 412450, 403650, 391227]  
list3 = [412450, 399827]  
list4 = [399829, 399246, 513350, 404370, 789827, 439931, 404451]  

关于列表,列表之间存在重叠。我将制作一个数据框,其中显示一组所有数字和它们所属的列表的名称。像这样:

数字 列表1 清单2 清单3 清单4
399826 真的 真的 错误的 错误的
399827 真的 错误的 真的 错误的
413350 真的 错误的 错误的 错误的
412450 错误的 真的 真的 错误的
ETC ... ... ... ...

为了比较列表,我在这里使用了一个函数:

def returnNotMatches(a, b):

    a = set(a)
    b = set(b)
    return list(b - a)

但我不知道如何正确制作数据框。

标签: pythonpandaslist

解决方案


首先为新列名按列创建字典,然后在值中dicts使用s 创建并创建,最后将s 替换为s:TrueDataFrameNaNFalse

list1 = [399826, 399827, 413350, 404450, 399827, 404451]  
list2 = [399825, 399826, 412450, 403650, 391227]  
list3 = [412450, 399827]  
list4 = [399829, 399246, 513350, 404370, 789827, 439931, 404451]  

d = {'list1':list1,'list2':list2,'list3':list3,'list4':list4 }

df  = pd.DataFrame({k: dict.fromkeys(v, True) for k, v in d.items()}).fillna(False)
print (df)
        list1  list2  list3  list4
399826   True   True  False  False
399827   True  False   True  False
413350   True  False  False  False
404450   True  False  False  False
404451   True  False  False   True
399825  False   True  False  False
412450  False   True   True  False
403650  False   True  False  False
391227  False   True  False  False
399829  False  False  False   True
399246  False  False  False   True
513350  False  False  False   True
404370  False  False  False   True
789827  False  False  False   True
439931  False  False  False   True

推荐阅读