Arjun Satish
Arjun Satish

Reputation: 23

Better way other than for loops,

I want to create a DataFrame that has the columns feature1, month and feature_segment. I have over 3,000 unique values in feature1 and 3 feature_segments, I now have to map each feature to each month and feature_segment,

for example: feature1 = 1 so the mapping should create a data frame as such:

feature1      month       feature_Segment
1              1           1
1              1           2
1              1           3
1              2           1
1              2           2
1              2           3
1              3           1
1              3           2
1              3           3
1              4           1 
1              4           2
1              4           3
1              5           1
1              5           2
1              5           3
1              6           1
1              6           2
1              6           3
1              7           1
1              7           2
1              7           3 
1              8           1
1              8           2
1              8           3
1              9           1
1              9           2
1              9           3
1              10          1
1              10          2
1              10          3
1              11          1
1              11          2
1              11          3
1              12          1
1              12          2
1              12          3

Now is there any way to create this data frame without using a for loop?

All the df columns are in lists.

Upvotes: 2

Views: 53

Answers (1)

jezrael
jezrael

Reputation: 863031

Use itertools.product:

from  itertools import product
feature = [1]
feature_Segment = [1,2,3]
month = range(1, 13)


df = pd.DataFrame(product(feature, month, feature_Segment), 
                  columns=['feature1','month','feature_Segment'])
print (df.head(10))
   feature1  month  feature_Segment
0         1      1                1
1         1      1                2
2         1      1                3
3         1      2                1
4         1      2                2
5         1      2                3
6         1      3                1
7         1      3                2
8         1      3                3
9         1      4                1

Upvotes: 5

Related Questions