получить строковые фрагменты в выражении groupby python - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть фрейм данных, где я хочу сгруппировать по полю ID и получить последние буквы в поле GG.Например, скажем, у меня есть следующее:

df1 = pd.DataFrame({
         'ID':['Q'] * 3,
         'GG':['L3S_0097A','L3S_0097B','L3S_0097C']

})

print (df1)
  ID         GG
0  Q  L3S_0097A
1  Q  L3S_0097B
2  Q  L3S_0097C

Я пытаюсь сгруппировать столбец идентификатора и получить только последнюю букву в столбце GG и добавить ее в defaultdict, например:

{'Q': ['A','B','C']}

Вот код, который я пробовал:

mm = df1.groupby('ID')['GG'].str[-1].apply(list).to_dict()
and also tried the following code:
for i, j in zip(df1.ID,df1.GG):
    mm[i].append(j[-1])

, но оба не работают.Могу ли я знать, как это сделать?

1 Ответ

0 голосов
/ 20 ноября 2018

Использовать синтаксический сахар - groupby by - 2 Series - GG Ряд с последним значением и df1['ID']:

mm = df1['GG'].str[-1].groupby(df1['ID']).apply(list).to_dict()

Или assign только последнее значение обратно к GG:

mm = df1.assign(GG = df1['GG'].str[-1]).groupby('ID')['GG'].apply(list).to_dict()

print (mm)
{'Q': ['A', 'B', 'C']}

Чистое решение Python:

from collections import defaultdict

mm = defaultdict(list)
#https://stackoverflow.com/a/10532492
for i, j in zip(df1.ID,df1.GG):
    mm[i].append(j[-1])

print (mm)
defaultdict(<class 'list'>, {'Q': ['A', 'B', 'C']})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...