如何在数据框中使用itertools组合

时间:2019-02-08 20:17:06

标签: python python-3.x pandas dataframe combinations

我有一个包含4列的数据框

Asset1 Asset2 Asset3 Asset4 

 a      b      c      d  
 e      f      g      h  

我想使用itertools.combinations创建一列,以便为我提供唯一组合的结果,因此理想情况下,输出为:

  Asset1 Asset2 Asset3 Asset4   test

  a      b      c      d        [abc, abd, bcd, acd]

  e      f      g      h        [efg, efh, egh, fgh]

我尝试使用.join()及其组合,但不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

欢迎您!

我建议逐行使用lambdaaxis=1):

from itertools import combinations
import pandas as pd

df = pd.DataFrame({'Asset1':('a','e'), 'Asset2': ('b','f'), 'Asset3': ('c', 'g'),  'Asset4': ('d', 'h')})
df['combinations'] = df.apply(lambda r: list(combinations(r, 3)), axis=1)

print(df)

输出:

  Asset1                      ...                                                       combinations
0      a                      ...                       [(a, b, c), (a, b, d), (a, c, d), (b, c, d)]
1      e                      ...                       [(e, f, g), (e, f, h), (e, g, h), (f, g, h)]

[2 rows x 5 columns]

如果您以后仅迭代组合,也可以跳过list(combinations...-这样,您将节省一些内存并将计算延迟到访问df['combinations']的那一刻:

df['combinations'] = df.apply(lambda r: combinations(r, 3), axis=1)
print(df)

然后,您将在combinations列中获得一个非常神秘的对象:

  Asset1                        ...                                                               combinations
0      a                        ...                          <itertools.combinations object at 0x0000022392...
1      e                        ...                          <itertools.combinations object at 0x0000022392...

[2 rows x 5 columns]