繁体   English   中英

从两个列表中获取元素的所有组合?

[英]Get all combinations of elements from two lists?

如果我有两个列表

l1 = ['A', 'B']

l2 = [1, 2]

获得 pandas 数据框的最优雅方法是什么,如下所示:

+-----+-----+-----+
|     | l1  | l2  |
+-----+-----+-----+
|  0  | A   | 1   |
+-----+-----+-----+
|  1  | A   | 2   |
+-----+-----+-----+
|  2  | B   | 1   |
+-----+-----+-----+
|  3  | B   | 2   |
+-----+-----+-----+

注意,第一列是索引。

使用itertools product

>>> from itertools import product
>>> pd.DataFrame(list(product(l1, l2)), columns=['l1', 'l2'])
  l1  l2
0  A   1
1  A   2
2  B   1
3  B   2

作为替代方案,您可以使用pandas的cartesian_product (对于大型numpy数组可能更有用):

In [11]: lp1, lp2 = pd.core.reshape.util.cartesian_product([l1, l2])

In [12]: pd.DataFrame(dict(l1=lp1, l2=lp2))
Out[12]:
  l1  l2
0  A   1
1  A   2
2  B   1
3  B   2

阅读具有正确方向的DataFrame看起来有点混乱......

注意:之前的cartesian_product位于pd.tools.util.cartesian_product

您还可以使用sklearn库,该库使用基于NumPy的方法:

from sklearn.utils.extmath import cartesian

df = pd.DataFrame(cartesian((L1, L2)))

对于更详细但可能更有效的变体,请参阅Numpy:x和y数组的笛卡尔积指向单个2D点阵列

您可以使用 function merge

df1 = pd.DataFrame(l1, columns=['l1'])
df2 = pd.DataFrame(l2, columns=['l2'])

df1.merge(df2, how='cross')

Output:

  l1  l2
0  A   1
1  A   2
2  B   1
3  B   2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM