Home > Mobile >  convert some columns in a dataframe to la column of list in the dataframe
convert some columns in a dataframe to la column of list in the dataframe

Time:01-14

I would like to convert some of the columns to list in adataframe.

The dataframe, df:

        Name  salary  department  days other
     0  ben   1000     A           90   abc
     1  alex  3000     B           80    gf
     2  linn  600      C           55   jgj
     3  luke  5000     D           88    gg

The desired output, df1:

    Name    list       other
 0  ben   [1000,A,90]   abc
 1  alex  [3000,B,80]    gf
 2  linn  [600,C,55]    jgj
 3  luke  [5000,D,88]    gg

CodePudding user response:

You can slice and convert the columns to a list of list, then to a Series:

cols = ['salary', 'department', 'days']
out = (df.drop(columns=cols)
         .join(pd.Series(df[cols].to_numpy().tolist(), name='list', index=df.index))
      )

Output:

   Name other           list
0   ben   abc  [1000, A, 90]
1  alex    gf  [3000, B, 80]
2  linn   jgj   [600, C, 55]
3  luke    gg  [5000, D, 88]

CodePudding user response:

If you want to preserve the order, then we can break it down into 3 parts, as @mozway mentioned in his answer

  1. Define columns we want to group (as @mozway mentioned in his answer)
  2. Find the first element's index (you can take it a step forward and find the smallest one, as the list won't be necessarily sorted as the DataFrame)
  3. Insert the Series to the dataframe at the position we generated

cols = ['salary', 'department', 'other']

first_location = df.columns.get_loc(cols[0])
list_values = pd.Series(df[cols].values.tolist()) # converting values to one list
df.insert(loc=first_location, column='list', value=list_values) # inserting the Series in the desired location
df = df.drop(columns=cols) # dropping the columns we grouped together.
print(df)

Which results in:

   Name           list other
0   ben  [1000, A, 90]   abc
1  alex  [3000, B, 80]    gf
...
  • Related