将唯一值加入新的数据帧(python,pandas)

2024-03-28 08:57:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,从中我将列的唯一值提取到a和b中

a = df1.col1.unique()
b = df2.col2.unique()

现在a和b是这样的

^{pr2}$

他们现在是类型努比·恩达雷在

我想加入他们来拥有这样的数据帧

   col1  col2
0    a     1
1    a     2
3    a     3
4    b     1
5    b     2
6    b     3
7    c     1
   . . .

有没有办法不使用循环?在


Tags: 数据类型col2col1uniquedf1df2办法
3条回答

使用numpy工具:

pd.DataFrame({'col1':np.repeat(a,b.size),'col2':np.tile(b,a.size)})

如果不使用至少一个for循环,则无法执行此任务。您所能做的最好的方法是隐藏for循环或使用隐式yield调用来生成内存效率高的生成器。在

itertools导出此任务的有效函数,这些函数隐式使用yield返回生成器:

from itertools import product

products = product(['a','b','c','d'], [1,2,3])

col1_items, col2_items = zip(*products)

result = pandas.DataFrame({'col1':col1_items, 'col2': col2_items})

itertools.product创建两个iterable的Cartesian productzip(*products)只是将得到的元组列表解压成两个单独的元组,如here。在

更新:

B.M.利用numpy的解决方案要快得多——我建议使用他的方法:

In [88]: %timeit pd.DataFrame({'col1':np.repeat(aa,bb.size),'col2':np.tile(bb,aa.size)})
10 loops, best of 3: 25.4 ms per loop

In [89]: %timeit pd.DataFrame(list(product(aa,bb)), columns=['col1', 'col2'])
1 loop, best of 3: 1.28 s per loop

In [90]: aa.size
Out[90]: 1000

In [91]: bb.size
Out[91]: 1000

尝试itertools.product

^{pr2}$

相关问题 更多 >