[Python] Pandas - combine column values into a list in a new column

Discussão em 'Python' iniciado por Stack, Abril 7, 2025.

  1. Stack

    Stack Membro Participativo

    I have a Python Pandas dataframe df:

    d = [['hello', 1, 'GOOD', 'long.kw'],
    [1.2, 'chipotle', np.nan, 'bingo'],
    ['various', np.nan, 3000, 123.456]]
    t = pd.DataFrame(data=d, columns=['A','B','C','D'])


    which looks like this:

    print(t)
    A B C D
    0 hello 1 GOOD long.kw
    1 1.2 chipotle NaN bingo
    2 various NaN 3000 123.456


    I am trying to create a new column which is a list of the values in A, B, C, and D. So it would look like this:

    t['combined']

    Out[125]:
    0 [hello, 1, GOOD, long.kw]
    1 [1.2, chipotle, nan, bingo]
    2 [various, nan, 3000, 123.456]
    Name: combined, dtype: object


    I am trying this code:

    t['combined'] = t.apply(lambda x: list([x['A'],
    x['B'],
    x['C'],
    x['D']]),axis=1)


    Which returns this error:

    ValueError: Wrong number of items passed 4, placement implies 1


    What is puzzling to me is if I remove one of the columns that I want to put in the list (or add another column to the dataframe that I DON'T add to the list), my code works.

    For instance, run this code:

    t['combined'] = t.apply(lambda x: list([x['A'],
    x['B'],
    x['D']]),axis=1)


    Returns this which is perfect if I only wanted the 3 columns:

    print(t)
    A B C D combined
    0 hello 1 GOOD long.kw [hello, 1, long.kw]
    1 1.2 chipotle NaN bingo [1.2, chipotle, bingo]
    2 various NaN 3000 123.456 [various, nan, 123.456]



    I am at a complete loss as to why requesting the 'combined' list be made of all columns in the dataframe would create an error, but selecting all but 1 column to create the 'combined' list works as expected.

    Continue reading...

Compartilhe esta Página