我有一个关于使用数组的基本问题:
a= ([ c b a a b b c a a b b c a a b a c b])
b= ([ 0 1 0 1 0 0 0 0 2 0 1 0 2 0 0 1 0 1])
I)有一个简短的方法,可以计算'c'
中a
与b
中的0,1和2以及'b'
对应的时间a
{1}}对应0,1,2等等
II)如何创建新数组c
(a
}的子集)和d
(b
的子集),使其仅包含这些元素a
中的相应元素是'c'
?
答案 0 :(得分:1)
zip
<强> 解释 强>
count
有两个列表,并在它们之间运行一个比喻拉链。导致元组列表正如abarnert建议您可以使用来自收藏品的A Counter。
或者您可以在z
上使用z.count('a',1)
方法。例如:defaultdict
。或者您可以使用{'SAM (manager)','MICHAEL (assi)','BEN(Servent)'}
代替。
答案 1 :(得分:0)
这些问题有点模糊但是这里使用AncestorType=ComboBox
是一种快速方法(有些人会称之为脏),但我认为应该首选不使用Pandas
而写的东西。
Pandas
如果我正确解释它,您可以交叉制表两个数组:
import pandas as pd
#create OP's lists
a= [ 'c', 'b', 'a', 'a', 'b', 'b', 'c', 'a', 'a', 'b', 'b', 'c', 'a', 'a', 'b', 'a', 'c', 'b']
b= [ 0, 1, 0, 1, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 1, 0, 1]
#dump lists to a Pandas DataFrame
df = pd.DataFrame({'a':a, 'b':b})
。交叉表基本上计算每个数字对应于特定字母的次数。 pd.crosstab(df.a, df.b).stack()
是将.stack
的输出转换为更易读的格式的命令。
.crosstab
在这里,我使用#question 1
pd.crosstab(df.a, df.b).stack()
## -- End pasted text --
Out[9]:
a b
a 0 3
1 2
2 2
b 0 4
1 3
2 0
c 0 4
1 0
2 0
dtype: int64
的布尔索引功能仅选择数组Panda
中与值a
对应的元素。因此,对于'c'
中df.a=='c'
和True
的每个值,a
将返回'c'
。 False
将返回布尔语句为true的df.loc[df.a=='c','a']
的值。
a
答案 2 :(得分:0)
Python列表:https://www.tutorialspoint.com/python/python_lists.htm有一个计数方法。
我建议你先按照评论中的说法对两个列表进行压缩,然后计算元组c,1的出现以及元组c,0的出现并总结它们,这就是你所需要的(I),基本上。 / p>
对于(II),如果我理解正确,你必须使用压缩列表并使用lambda x对它们应用过滤器:x [0] == x [1]