我正试图找到一种有效的方法来实现以下目标:
-对于df中的每一行,生成Var1
、Var2
和Var3
之间的笛卡尔积。
-笛卡尔积的每个元组都是数据帧中的新行
-对于每一行,在原始数据帧中插入其他列(在我的示例中是Id
和Grp
)
我知道我可以用list(itertools.product(a, b, c))
之类的东西得到笛卡尔积,但我不知道如何在数据帧环境中做到这一点。我可以在for循环中这样做,但是生产数据帧可能有超过10万行,所以我首先考虑效率。你知道吗
使用的Python版本:3.6+
输入数据帧:
import numpy as np
import pandas as pd
df = pd.DataFrame({'Id': [1,2],
'Grp': ['A','B'],
'Var1': [[11,12],[11,19]],
'Var2': [[0],[20,25]],
'Var3': [[34],[31,35,38]]
})
预期输出(要么CartesianProduct
要么Var1, Var2, Var3
很好,我不需要两者):
CartesianProduct Grp Id Var1 Var2 Var3
0 (11, 0, 34) A 1 11 0 34
1 (12, 0, 34) A 1 12 0 34
2 (11, 20, 31) B 2 11 20 31
3 (11, 20, 35) B 2 11 20 35
4 (11, 20, 38) B 2 11 20 38
5 (11, 25, 31) B 2 11 25 31
6 (11, 25, 35) B 2 11 25 35
7 (11, 25, 38) B 2 11 25 38
8 (19, 20, 31) B 2 19 20 31
9 (19, 20, 35) B 2 19 20 35
10 (19, 20, 38) B 2 19 20 38
11 (19, 25, 31) B 3 19 25 31
12 (19, 25, 35) B 4 19 25 35
13 (19, 25, 38) B 5 19 25 38
以下是
itertools
的一种方法:相关问题 更多 >
编程相关推荐