Начиная с этого dataframe df
:панды получить вложенные значения строки из массивов
node1,node2,lang,w,c1,c2
1,2,it,1,a,a
1,2,en,1,a,a
2,3,es,2,a,b
3,4,it,1,b,b
5,6,it,1,c,c
3,5,tg,1,b,c
1,7,it,1,a,a
7,1,es,1,a,a
3,8,es,1,b,b
8,4,es,1,b,b
1,9,it,1,a,a
Я выполнил groupby
операции, как:
g = df.groupby(['c1','c2'])['lang'].unique().reset_index()
результатов:
c1 c2 lang
0 a a [it, en, es]
1 a b [es]
2 b b [it, es]
3 b c [tg]
4 c c [it]
Сохранение в. csv и прочитать его обратно:
g.to_csv('myfile.csv')
g = pd.read_csv('myfile.csv')
получения другого формата lang
колонки:
c1 c2 lang
0 a a ['it' 'en' 'es']
1 a b ['es']
2 b b ['it' 'es']
3 b c ['tg']
4 c c ['it']
Моя цель сейчас, чтобы подсчитать количество элементов в каждой строке lang
, и быть в состоянии получить эти значения по отдельности. Я пытался построить новый столбец с длиной массива строки:
g['len'] = df['lang'].apply(lambda x: x.size)
получение:
AttributeError: 'str' object has no attribute 'size'
Глядя значение lang
колонки, я понял, что после GroupBy, что колонна стала беспорядок:
In [113]: g['lang'].values
Out[113]: array(["['it' 'en' 'es']", "['es']", "['it' 'es']", "['tg']", "['it']"], dtype=object)
Как я могу получить длину каждого вложенного массива строк, а затем получить значение каждой строки в нем? Я думал, что тип преобразования, но мой случай немного сложнее.
EDIT: добавить информацию о разном формате столбца lang
до и после записи/чтения в/из .csv.
просьба представить ожидаемой выходной – MaxU