У меня есть данные, подобные следующим:
NAME ETHNICITY_RECAT TOTAL_LENGTH 3LETTER_SUBSTRINGS
joseph fr 14 jos, ose, sep, eph
ann en 16 ann
anne ir 14 ann, nne
tom en 18 tom
tommy fr 16 tom, omm, mmy
ann ir 19 ann
... more rows
Значения 3LETTER_SUBSTRINGS - это строка, которая захватывает все трехбуквенные подстроки переменной NAME. Я хотел бы объединить его в один список, в котором каждый разделенный запятыми элемент добавляется в список каждой строкой и должен рассматриваться как один элемент списка. Следующее:
ETHNICITY_RECAT TOTAL_LENGTH 3LETTER_SUBSTRINGS
min max mean <lambda>
fr 2 26 13.22 [jos, ose, sep, eph, tom, oom, mmy, ...]
en 3 24 11.92 [ann, tom, ...]
ir 4 23 12.03 [ann, nne, ann, ...]
Я вроде "сделал" это с помощью следующего кода:
aggregations = {
'TOTAL_LENGTH': [min, max, 'mean'],
'3LETTER_SUBSTRINGS': lambda x: list(x),
}
self.df_agg = self.df.groupby('ETHNICITY_RECAT', as_index=False).agg(aggregations)
Проблема в том, что вся строка "ann, anne" считается одним элементом спискав последнем списке, вместо того, чтобы рассматривать каждый элемент как отдельный список, такой как «ann», «anne».
Я хотел бы видеть самую высокую частоту подстрок, но теперь я получаю частотувсю строку (вместо отдельной трехбуквенной подстроки), когда я запускаю следующий код:
from collections import Counter
x = self.df_agg_eth[self.df_agg_eth['ETHNICITY_RECAT']=='en']['3LETTER_SUBSTRINGS']['<lambda>']
x_list = x[0]
c = Counter(x_list)
Я получаю это:
[('jos, ose, sep, eph', 19), ('ann, nee', 5), ...]
Вместо того, что я хочу:
[('jos', 19), ('ose', 19), ('sep', 23), ('eph', 19), ('ann', 15), ('nee', 5), ...]
Я пытался:
'3LETTER_SUBSTRINGS': lambda x: list(i) for i in x.split(', '),
Но там написано invalid syntax
.