Как использовать комбинации itertools в кадре данных - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть фрейм данных с четырьмя столбцами, подобными этому

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 голосов
/ 09 февраля 2019

Добро пожаловать в SO!

Я предлагаю использовать lambda построчно (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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...