我有2个看起来像这样的熊猫系列:
import pandas as pd
listA = [5,4,3]
listB = ["a","b","c"]
s = pd.Series(listA)
print(s)
p = pd.Series(listB)
print(p)
我想获得像这样混合在一起的2个列表的列表:
listTogether = ["a5","a4","a3","b5","b4","b3","c5","c4","c3"]
t = pd.Series(listTogether)
print(t)
您有什么提示吗?可以避免循环吗?
非常感谢您的帮助
答案 0 :(得分:5)
MultiIndex
的招数
listTogether = pd.MultiIndex.from_product([p,s.astype(str)]).map(''.join).tolist()
listTogether
Out[242]: ['a5', 'a4', 'a3', 'b5', 'b4', 'b3', 'c5', 'c4', 'c3']
答案 1 :(得分:2)
无论是否喜欢,您都在循环播放。
[f'{b}{a}' for b in listB for a in listA]
['a5', 'a4', 'a3', 'b5', 'b4', 'b3', 'c5', 'c4', 'c3']
答案 2 :(得分:1)
您可以使用itertools产品
from itertools import product
pd.DataFrame(list(product(p.tolist(),s.astype(str).tolist()))).apply(''.join, axis = 1).tolist()
839 µs ± 18.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
['a5', 'a4', 'a3', 'b5', 'b4', 'b3', 'c5', 'c4', 'c3']
如果您想要一个非常有效的解决方案,请使用纯python方式
[''.join(i) for i in list(product(p.tolist(),s.astype(str).tolist()))]
79 µs ± 924 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
答案 3 :(得分:0)
使用zip
可能会对您有所帮助。
您可以对列表执行类似的操作,但是其中包含一个for循环:
listTogether = ['{}{}'.format(a,b) for (a,b) in zip(listA,listB)]