Home > Net >  how to solve pandas multi-column explode issue?
how to solve pandas multi-column explode issue?

Time:12-26

I am trying to explode multi-columns at a time systematically. Such that:

[1

and I want the final output as:

enter image description here

I tried

df=df.explode('sauce', 'meal')

but this only provides the first element ( sauce) in this case to be exploded, and the second one was not exploded.

I also tried:

df=df.explode(['sauce', 'meal'])

but this code provides

ValueError: column must be a scalar

error.

I tried this approach, and also this. none worked.

Note: cannot apply to index, there are some none- unique values in the fruits column.

CodePudding user response:

Prior to pandas 1.3.0 use:

df.set_index(['fruits', 'veggies'])[['sauce', 'meal']].apply(pd.Series.explode).reset_index()

Output:

  fruits veggies sauce meal
0     x1      y2     a    d
1     x1      y2     b    e
2     x1      y2     c    f
3     x2      y2     g    k
4     x2      y2     h    l

Many columns? Try:

df.set_index(df.columns.difference(['sauce', 'meal']).tolist())\
  .apply(pd.Series.explode).reset_index()

Output:

  fruits veggies sauce meal
0     x1      y2     a    d
1     x1      y2     b    e
2     x1      y2     c    f
3     x2      y2     g    k
4     x2      y2     h    l

CodePudding user response:

Update your version of Pandas

# Setup
df = pd.DataFrame({'fruits': ['x1', 'x2'],
                   'veggies': ['y1', 'y2'],
                   'sauce': [list('abc'), list('gh')],
                   'meal': [list('def'), list('kl')]})
print(df)

# Output
  fruits veggies      sauce       meal
0     x1      y1  [a, b, c]  [d, e, f]
1     x2      y2     [g, h]     [k, l]

Explode (Pandas 1.3.5):

out = df.explode(['sauce', 'meal'])
print(out)

# Output
  fruits veggies sauce meal
0     x1      y1     a    d
0     x1      y1     b    e
0     x1      y1     c    f
1     x2      y2     g    k
1     x2      y2     h    l
  • Related