我们有一个包含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) )
有什么建议吗?
答案 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))]