[英]Creating Unique Data Frame from Two Lists
我有两个列表,我正在尝试创建一个矩阵(或数据框),其中包含 list2 中的值在 list1 的每个子列表中的次数:
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
输出:
california 1
illinois 1
maine 0
oregon 0
wisconsin 0
florida 0
上面的代码遍历第一个子列表并打印输出。 我不知道如何让它移动到下一个子列表,同时确保 list2 也被循环。
我的最终愿景是让矩阵在左侧具有每个子列表,并且列标题为列表 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.
使用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 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]
这是一种快速实施但时间缓慢的方法。
for item2 in list2:
count = 0
for l in list1:
for item in l:
if item == item2:
count += 1
print(item2, count)
我意识到这不会创建矩阵。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.