0

After grouping a dataframe the result is that I have a list in each row of the dataframe.

                                                 Id
0   [GSTE00057]
1   [LOKH18675]
2   [LWWSD61, PTZW6, VCVCD064, AFER53423]
3   [KJHZ64534]
4   [GDHSGD88888]
5   [FSDAE00003]
6   [IHUGZF051, ZGGTHZ0052, PRRDSE00053, PUITZRT00087]

How can I make one list out of it?

I tried:

.apply(lambda x: np.concatenate(x.values).tolist()).reset_index()

but I get :

'numpy.ndarray' object has no attribute 'values'

desired output:

[GSTE00057, LOKH18675,LWWSD61, PTZW6, VCVCD064, AFER53423, KJHZ64534.........]
stanvooz
  • 522
  • 3
  • 19

2 Answers2

2

Use itertools.chain:

import pandas as pd
from itertools import chain

# toy data
data = [["GSTE00057"],
        ["LOKH18675"],
        ["LWWSD61", "PTZW6", "VCVCD064", "AFER53423"],
        ["KJHZ64534"],
        ["GDHSGD88888"],
        ["FSDAE00003"],
        ["IHUGZF051", "ZGGTHZ0052", "PRRDSE00053", "PUITZRT00087"]]
df = pd.DataFrame(data=[[e] for e in data], columns=["Id"])

# concatenate
res = list(chain.from_iterable(df["Id"]))
print(res)

Output

['GSTE00057', 'LOKH18675', 'LWWSD61', 'PTZW6', 'VCVCD064', 'AFER53423', 'KJHZ64534', 'GDHSGD88888', 'FSDAE00003', 'IHUGZF051', 'ZGGTHZ0052', 'PRRDSE00053', 'PUITZRT00087']

Or as an alternative:

res = np.concatenate(df["Id"]).tolist()
Dani Mesejo
  • 61,499
  • 6
  • 49
  • 76
0

Using pandas methods: pd.Series.explode and pd.Series.tolist

df["ID"].explode().tolist()

Outputs:

['GSTE00057', 'LOKH18675', 'LWWSD61', 'PTZW6', 'VCVCD064', 'AFER53423', 'KJHZ64534', 'GDHSGD88888', 'FSDAE00003', 'IHUGZF051', 'ZGGTHZ0052', 'PRRDSE00053', 'PUITZRT00087']
Alex
  • 6,610
  • 3
  • 20
  • 38