从列中的列表生成组合

时间:2017-11-20 09:50:29

标签: pandas

我们有一个包含2列的DataFrame,如下所示:

|Type   |list_dates  |  
|:----:|:-----------:|  
|1    |['a','b','c']|  
|2    |['d','e','f','g']| 

我们需要在复制Type时生成所有列表元素的组合,如下所示:

|Type   |list_dates  |  
|:----:|:-----------:|  
|1    |['a','b']|  
|1    |['a','c']|  
|1    |['b','c']|  
|2    |['d','e']|  
|2    |['e','f']|  
.....

为了生成组合,我们使用以下代码:

import itertools
list(itertools.combinations(df.list_dates,2) )

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我认为纯python解决方案效果最好。 因此,首先按hamcrest-core-1.3.jar // i believe thats not needed, but leave it anyway jboss-logging-3.2.1.Final.jar undertow-core-2.0.0.Alpha1.jar xnio-api-3.3.6.Final.jar xnio-nio-3.3.6.Final.jar 创建元组,然后按组合创建dict。最后由构造函数创建list of tuples

DataFrame

或嵌套import itertools L = [] for x, y in zip(df['Type'], df['list_dates']): a = list(itertools.combinations(y,2)) for i in a: L.append((x, list(i))) 解决方案:

list comprehension

谢谢,piRSquared提出了很好的建议 - 如果L = [(x, list(i)) for x, y in zip(df['Type'], df['list_dates']) for i in list(itertools.combinations(y,2))] df = pd.DataFrame(L, columns=['Type','list_dates']) print (df) Type list_dates 0 1 [a, b] 1 1 [a, c] 2 1 [b, c] 3 2 [d, e] 4 2 [d, f] 5 2 [d, g] 6 2 [e, f] 7 2 [e, g] 8 2 [f, g] 只有DataFrame

2 columns

如果有更多列首先过滤:

import itertools

L = []
for x, y in df.values:
    a = list(itertools.combinations(y,2))
    for i in a:
        L.append((x, list(i)))

L = [(x, list(i)) for x, y in df.values for i in list(itertools.combinations(y,2))]