首页 > 解决方案 > 在groupby语句python中获取字符串切片

问题描述

我有一个数据框,我想按 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

我正在尝试对 ID 列进行分组并仅获取 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])

但两者都不起作用。我可以知道怎么做吗?

标签: python-3.xpandas

解决方案


使用带有最后一个值和的语法糖 - groupbyby - 2 Series-系列:GGdf1['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']})

推荐阅读