serie1 = pd.Series(['A','B','C','A','D'])
serie2 = pd.Series(['X','Y','A','Z','A','D'])
pd.crosstab(serie2,serie1) > 0
col_0 A B C D
row_0
A False False True True
X True False False False
Y False True False False
Z True False False False
(注意,行索引自动值排序,所以不能在该值出现在serie1
顺序您可以通过与.reorder_levels(...)
玩覆盖。)
2)对于指数匹配的,让他们作为阵列的字典...
serie2.groupby(serie1).indices
{'A': array([0, 3]), 'C': array([2]), 'B': array([1]), 'D': array([4])}
# ... or as a list of arrays...
serie2.groupby(serie1).indices.values()
[array([0, 3]), array([2]), array([1]), array([4])]
# Here are alternatives with list comprehensions which are probably less efficient than `Series.groupby()`
>>> [ np.flatnonzero(serie2.apply(lambda i2: i2==i1)) for i1 in serie1 ]
[array([2, 4]), array([], dtype=int64), array([], dtype=int64), array([2, 4]), array([5])]
>>> [ np.flatnonzero(serie2.apply(lambda i2: i2==i1)).tolist() for i1 in serie1 ]
[[2, 4], [], [], [2, 4], [5]]
什么是你想要的输出数据结构? – DSM
我没有所需的输出数据结构。我只需要能够在'serie2'中找到'serie1'值的匹配/匹配(索引)。长的答案是:'serie2'属于一个有另一列的数据框(我们称之为'long_name'),并且我想将正确的'long_name'添加到'serie1'。不幸的是'serie1'和'serie2'没有相关的索引长度不一样。 –
当你说*“...然后得到每列”*“的”真“值的索引时,您可能需要布尔矩阵/表格/交叉制表符或匹配索引......或者两者兼而有之。你想如何匹配你的指数?作为多个系列?作为一个字典?等等。 – smci