Как разбить вложенный список внутри столбца Pandas Dataframe по вертикали, ie, на отдельные строки - PullRequest
1 голос
/ 25 марта 2020

У меня есть датафрейм, я хочу разделить Co2 по очереди:

Co1 Co2
1 [{'link':'http:abc.com'},{'link':'http:def.com'}]
2 [{'link':'http:ghi.com'},{'link':'http:lmn.com'}]

Ожидаемый результат

Co1 Co2
1 http:abc.com
1 http:def.com
2 http:ghi.com
2 http:lmn.com

Ответы [ 2 ]

3 голосов
/ 25 марта 2020

Другой способ с explode и series.str.get:

#df['Co2'] = df['Co2'].apply(ast.literal_eval) : if Co2 are not actual lists
out = df.explode('Co2').assign(Co2 = lambda x: 
                              x['Co2'].str.get('link')).reset_index(drop=True)

print(out) 

   Co1           Co2
0    1  http:abc.com
1    1  http:def.com
2    2  http:ghi.com
3    2  http:lmn.com
3 голосов
/ 25 марта 2020

Использовать concat с диктионарем DataFrame, созданным при понимании списка, и присоединять DataFrame.join к оригиналу, DataFrame.pop используется для столбец извлечения:

import ast

#if values are string repr of lists
dfs = {k:pd.DataFrame(ast.literal_eval(x)) for k, x in df.pop('Co2').items()}
#if values are lists of dicts
#dfs = {k:pd.DataFrame(x) for k, x in df.pop('Co2').items()}

df = df.join(pd.concat(dfs).reset_index(level=1, drop=True)).reset_index(drop=True)
print (df)
   Co1          link
0    1  http:abc.com
1    1  http:def.com
2    2  http:ghi.com
3    2  http:lmn.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...