Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从两个列表创建唯一的数据帧_Python - Fatal编程技术网

Python 从两个列表创建唯一的数据帧

Python 从两个列表创建唯一的数据帧,python,Python,我有两个列表,我正在尝试创建一个矩阵(或数据帧),其中列出列表2中的值在列表1的每个子列表中的次数: list1 = [['texas','california','illinois'],['illinois','montana'],['new york','iowa'],['florida'],['north carolina']] list2 = ['california','illinois','maine','oregon','wisconsin','florida'] count =

我有两个列表,我正在尝试创建一个矩阵(或数据帧),其中列出列表2中的值在列表1的每个子列表中的次数:

list1 = [['texas','california','illinois'],['illinois','montana'],['new york','iowa'],['florida'],['north carolina']]
list2 = ['california','illinois','maine','oregon','wisconsin','florida']

count = 0
countx = 0
i = 0

for item in list1:
    while i < len(list2):
        x = list1[count].count(list2[countx])
        print(list2[countx],x)
        countx = countx + 1
        i = i + 1
上面的代码循环遍历第一个子列表并打印输出。我不知道如何让它移动到下一个子列表,同时确保列表2也在循环

我的最终目标是使矩阵的每个子列表都位于左侧,列标题为列表2

                                   california  illinois  maine  oregon  wisconsin  florida
['texas','california','illinois']     1           1        0      0        0          0 
['illinois','montana']                0           1        0      0        0          0  
etc.


这里有一个快速实现但时间缓慢的方法

清单2中的项目2的
:
计数=0
对于列表1中的l:
对于l中的项目:
如果项==项2:
计数+=1
打印(第2项,计数)

我意识到这不会创建矩阵。

使用
pandas.Series.str.contains

s = pd.Series(list1)
df = pd.DataFrame({k: s.str.contains(k, regex=False) 
                   for k in list2},
                  dtype=int).set_index(s)
print(df)
输出:

california 1
illinois 1
maine 0
oregon 0
wisconsin 0
florida 0
                               california  illinois  maine  oregon  wisconsin  \
[texas, california, illinois]           1         1      0       0          0   
[illinois, montana]                     0         1      0       0          0   
[new york, iowa]                        0         0      0       0          0   
[florida]                               0         0      0       0          0   
[north carolina]                        0         0      0       0          0   

                               florida  
[texas, california, illinois]        0  
[illinois, montana]                  0  
[new york, iowa]                     0  
[florida]                            1  
[north carolina]                     0  

虽然不清楚将列表作为索引值的价值是什么,但这里有一段相当简单的代码,可以完全满足您的要求:

import pandas as pd

list1 = [['texas', 'california', 'illinois'],
         ['illinois', 'montana'],
         ['new york', 'iowa'],
         ['florida'],
         ['north carolina']]
list2 = ['california', 'illinois', 'maine', 'oregon', 'wisconsin', 'florida']

df = pd.DataFrame()
for x1 in list1:
    df = df.append(pd.DataFrame([[x1, *[x1.count(x2) for x2 in list2]]], columns=['index', *list2]).set_index('index'))

print(df)
结果:

                               california  illinois  ...  wisconsin  florida
index                                                ...                    
[texas, california, illinois]           1         1  ...          0        0
[illinois, montana]                     0         1  ...          0        0
[new york, iowa]                        0         0  ...          0        0
[florida]                               0         0  ...          0        1
[north carolina]                        0         0  ...          0        0

[5 rows x 6 columns]

为什么希望列表成为数据帧中每一行的索引值?你能举一个你希望如何使用这个数据框的例子,这清楚地说明为什么像
['illinois','montana']
这样的东西作为索引值是有用的吗?