为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕丝7291255 2021-11-02 20:06:25
我有一个像这样有 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 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

欢迎来到 SO!


我建议使用lambdarow-wise ( axis=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]


查看完整回答
反对 回复 2021-11-02
  • 1 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信