0

The below dataframe represents presumed residence of a set of individuals:

import pandas as pd

df = pd.DataFrame({'PRESUMED_RESIDENCE':['SJDR1', 'LD1', 'LD2', 'TR1', 'TR2', 'SVM']})
df

I need to create a list that contains all the possible trajectories that an individual can take - here I will call these trajectories motifs -. Below is an example of the list I expect as a final result:

MOTIFS = [[SJDR1],[LD1],[LD2], [TR1], [TR2], [SVM], [SJDR1,LD1], [SJDR1,LD2], [SJDR1,TR1],
[SJDR1,TR2], [SJDR1,SVM], [SJDR1, TR1, TR2].....[SJDR1,LD1,LD2,TR1,TR2,SVM]

With this list and the complete dataframe I can find patterns of mobility of individuals, seeing which trajectories are the most repeated. However, I have no idea how I can generate this list. Can anyone help?

Costa.Gustavo
  • 849
  • 10
  • 21
  • check out itertools – Kenny Ostrom Jun 01 '21 at 12:35
  • If order in the sublists doesn't matter isn't this the list of non-empty subsets of a list? If so, there are solutions such as [create a list of all the subsets of a given list in python 3.x](https://stackoverflow.com/questions/43014681/create-a-list-of-all-the-subsets-of-a-given-list-in-python-3-x) which uses itertools.combinations. – DarrylG Jun 01 '21 at 12:36
  • Maybe you're looking for `itertools.combinations(['SJDR1', 'LD1', 'LD2', 'TR1', 'TR2', 'SVM'], num_of_combinations)` – Aditya Jun 01 '21 at 12:38

1 Answers1

1

Use more_itertools.powerset which will result in list of tuples so convert it into list of list using map()

import more_itertools
vals = df["PRESUMED_RESIDENCE"].to_list()
out = list(more_itertools.powerset(vals))[1:]
MOTIFS = list(map(list, out))
print(MOTIFS)

>> [['SJDR1'],
 ['LD1'],
 ['LD2'],
 ['TR1'],
 ['TR2'],
 ['SVM'],
 ['SJDR1', 'LD1'],
 ['SJDR1', 'LD2'],
 ['SJDR1', 'TR1'],
 ['SJDR1', 'TR2'],
 ['SJDR1', 'SVM'],
 ['LD1', 'LD2'],
 ['LD1', 'TR1'],
 ['LD1', 'TR2'],
 ['LD1', 'SVM'],
 ['LD2', 'TR1'],
 ['LD2', 'TR2'],
 ['LD2', 'SVM'],
 ['TR1', 'TR2'],
 ['TR1', 'SVM'],
 ['TR2', 'SVM'],
 ['SJDR1', 'LD1', 'LD2'],
 ['SJDR1', 'LD1', 'TR1'],
 ['SJDR1', 'LD1', 'TR2'],
 ['SJDR1', 'LD1', 'SVM'],
 ['SJDR1', 'LD2', 'TR1'],
 ['SJDR1', 'LD2', 'TR2'],
 ['SJDR1', 'LD2', 'SVM'],
 ['SJDR1', 'TR1', 'TR2'],
 ['SJDR1', 'TR1', 'SVM'],
 ['SJDR1', 'TR2', 'SVM'],
 ['LD1', 'LD2', 'TR1'],
 ['LD1', 'LD2', 'TR2'],
 ['LD1', 'LD2', 'SVM'],
 ['LD1', 'TR1', 'TR2'],
 ['LD1', 'TR1', 'SVM'],
 ['LD1', 'TR2', 'SVM'],
 ['LD2', 'TR1', 'TR2'],
 ['LD2', 'TR1', 'SVM'],
 ['LD2', 'TR2', 'SVM'],
 ['TR1', 'TR2', 'SVM'],
 ['SJDR1', 'LD1', 'LD2', 'TR1'],
 ['SJDR1', 'LD1', 'LD2', 'TR2'],
 ['SJDR1', 'LD1', 'LD2', 'SVM'],
 ['SJDR1', 'LD1', 'TR1', 'TR2'],
 ['SJDR1', 'LD1', 'TR1', 'SVM'],
 ['SJDR1', 'LD1', 'TR2', 'SVM'],
 ['SJDR1', 'LD2', 'TR1', 'TR2'],
 ['SJDR1', 'LD2', 'TR1', 'SVM'],
 ['SJDR1', 'LD2', 'TR2', 'SVM'],
 ['SJDR1', 'TR1', 'TR2', 'SVM'],
 ['LD1', 'LD2', 'TR1', 'TR2'],
 ['LD1', 'LD2', 'TR1', 'SVM'],
 ['LD1', 'LD2', 'TR2', 'SVM'],
 ['LD1', 'TR1', 'TR2', 'SVM'],
 ['LD2', 'TR1', 'TR2', 'SVM'],
 ['SJDR1', 'LD1', 'LD2', 'TR1', 'TR2'],
 ['SJDR1', 'LD1', 'LD2', 'TR1', 'SVM'],
 ['SJDR1', 'LD1', 'LD2', 'TR2', 'SVM'],
 ['SJDR1', 'LD1', 'TR1', 'TR2', 'SVM'],
 ['SJDR1', 'LD2', 'TR1', 'TR2', 'SVM'],
 ['LD1', 'LD2', 'TR1', 'TR2', 'SVM'],
 ['SJDR1', 'LD1', 'LD2', 'TR1', 'TR2', 'SVM']]
Hamza usman ghani
  • 2,264
  • 5
  • 19