我正在寻找从另外两个数据框架创建数据框架的最简单方法,以便它包含其元素的所有组合。例如我们有这两个数据框:
list1 = ["A", "B", "C", "D", "E"]
list2 = ["x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8"]
df1 = pd.DataFrame(list1)
df2 = pd.DataFrame(list2)
Run Code Online (Sandbox Code Playgroud)
结果必须是:
0 1
0 A x1
1 A x2
2 A x3
3 A x4
4 A x5
5 A x6
6 A x7
7 A x8
8 B x1
9 B x2
Run Code Online (Sandbox Code Playgroud)
我尝试从列表中进行组合,它适用于小列表,但不适用于大列表。谢谢
如何在Python中以优雅(简洁)的方式计算列表上的n次笛卡尔积,即A \xc3\x97 ... \xc3\x97 A(n次)?
\n例子:
\n>>> l = ["a", "b", "c"]\n>>> cart_prod(l, 0)\n[]\n>>> cart_prod(l, 1)\n[(\'a\',), (\'b\',), (\'c\',)]\n>>> cart_prod(l, 2)\n[(\'a\', \'a\'), (\'a\', \'b\'), (\'a\', \'c\'), (\'b\', \'a\'), (\'b\', \'b\'), (\'b\', \'c\'), (\'c\', \'a\'), (\'c\', \'b\'), (\'c\', \'c\')]\n>>> cart_prod(l, 3)\n[(\'a\', \'a\', \'a\'), (\'a\', \'a\', \'b\'), (\'a\', \'a\', \'c\'), (\'a\', \'b\', \'a\'), (\'a\', \'b\', \'b\'), (\'a\', \'b\', \'c\'), (\'a\', \'c\', \'a\'), (\'a\', \'c\', \'b\'), (\'a\', \'c\', \'c\'),\n (\'b\', \'a\', \'a\'), (\'b\', \'a\', \'b\'), (\'b\', \'a\', \'c\'), (\'b\', \'b\', \'a\'), (\'b\', …Run Code Online (Sandbox Code Playgroud) 我有两个字符串列表:
l1 = ["Col1", "Col2", "Col3"]
l2 = ["_ad1", "_ad2"]
Run Code Online (Sandbox Code Playgroud)
我想将两个列表l1x的笛卡尔积/串联l2成一个元素,即我想要的结果是:
["Col1_ad1", "Col1_ad2", "Col2_ad1", "Col2_ad2", "Col3_ad1", "Col1_ad1"]
Run Code Online (Sandbox Code Playgroud)
当然我可以这样做:
result = []
for colname in l1:
for suffix in l2:
result.append(f"{colname}{suffix}")
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更Pythonic的方式?
编辑:我并不是在寻找一种更Pythonic的方式来制定循环(即列表理解)。相反,我正在寻找一个内置函数,类似的函数
concatenate(l1, l2)会产生所需的结果
对于集合 {1, 2, ..., n} 中的每个值 j,其中 n 的值可以变化(它是我的程序中的某个变量,可以根据用户的输入而不同),我有一个数组A_j。我想获得所有数组 A_j 的笛卡尔积,以便我可以迭代该笛卡尔积(从每个 A_1、A_2、... A_n 中取出一个元素以获得一个元组 (a_1、a_2、... , a_n) 在 A_1 x A_2 x ... x A_n) 中。我将如何在 Julia 中实现这一目标?
我有两个数组 A 和 B,分别有 m 和 n int 变量。我有一个函数 f,我想生成所有 f(a, b),其中 a 在 A 中,b 在 B 中:
A = {a1, a2, a3, ...., am}
B = {b1, b2, b3, ...., bn}
C = f(A * B) = {f(a1,b1), f(a1,b2), f(a1,b3), ..., f(a1, bn),
f(a2,b1), f(a2,b2), f(a1,b3), ..., f(a2, bn),
...
f(am,b1), f(am,b2), f(am,b3), ..., f(am, bn)}
Run Code Online (Sandbox Code Playgroud)
更准确地说,我的函数 f 是数字之间的简单按位或,但我想一般性地问它。此外,结果中项目的顺序并不重要。我只想从 A 和 B 生成所有可能的对。
由于我需要生成并存储结果,如何有效地实现它(使用C++ Cuda)以减少访问全局内存的次数?我需要使用共享内存吗?
任何建议将不胜感激。
不确定正确的术语是否是“分配财产”,但我记得在学校学过这个,所以这里是我想做的一个例子:
鉴于:
type MyHList = (A :+: B :+: C :+: CNil) :: (Foo :+: Bar :+: CNil) :: HNil
Run Code Online (Sandbox Code Playgroud)
Shapeless 中是否有任何内置类型类可以解决这个问题:
type Out = (A, Foo) :+: (A, Bar) :+: (B, Foo) :+: (B, Bar) :+: (C, Foo) :+: (C, Bar) :+: CNil
Run Code Online (Sandbox Code Playgroud)
?
谢谢
假设我有一个列表,我想生成所有唯一元素对的列表,而不考虑订单.一种方法是:
mylist = ['W','X','Y','Z']
for i in xrange(len(mylist)):
for j in xrange(i+1,len(mylist)):
print mylist[i],mylist[j]
W X
W Y
W Z
X Y
X Z
Y Z
Run Code Online (Sandbox Code Playgroud)
我想用迭代器做这个,我想到了以下内容,即使它没有简洁:
import copy
it1 = iter(mylist)
for a in it1:
it2 = copy.copy(it1)
for b in it2:
print a,b
Run Code Online (Sandbox Code Playgroud)
但这甚至都行不通.什么是更加pythonic和有效的方式,使用迭代器或zip等?
我们有简单的表格:
CREATE TABLE dbo.test
(
c1 INT
)
INSERT INTO test (c1) VALUES (1)
INSERT INTO test (c1) VALUES (2)
INSERT INTO test (c1) VALUES (3)
Run Code Online (Sandbox Code Playgroud)
接下来计算一些SUM:
SELECT SUM(t1.c1) FROM test AS t1 , test AS t2
WHERE t2.c1 = 1
Run Code Online (Sandbox Code Playgroud)
输出为:6.简单易行.
但如果我跑:
SELECT SUM(t1.c1), * FROM test AS t1 , test AS t2
WHERE t2.c1 = 1
Run Code Online (Sandbox Code Playgroud)
输出是:
6 2 2
6 2 3
6 2 1
6 3 2
6 3 3
6 3 1
6 1 2 …Run Code Online (Sandbox Code Playgroud) 你知道如何在python中循环100和200的笛卡尔积,例如:
for cartesian(100,200):
print result
1,1
1,2
.
.
.
123,197
.
.
100,200
Run Code Online (Sandbox Code Playgroud) 试图将两种数据类型的笛卡尔积产品放入一个列表中:
data X = hello | goodbye | hi
deriving (ord, enum, eq, show)
data Y = hello | goodbye | hi
deriving (ord, enum, eq, show)
compList :: [a]
compList = [(x, y) | x <- X, y <- Y]
Run Code Online (Sandbox Code Playgroud)
显然x < - X等目前不起作用,我只是想知道你们怎么会这样做?
干杯.