【问题标题】:get string slices in a groupby statement python在 groupby 语句中获取字符串切片 python
【发布时间】:2019-04-22 20:45:08
【问题描述】:

我有一个数据框,我想在其中按 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.x pandas


    【解决方案1】:

    使用语法糖 - 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']})
    

    【讨论】:

    • 谢谢.. 它有效.. 但我可以知道如何使用 zip 语句来做到这一点吗?因为当我尝试使用上面发布的邮政编码时,我收到这样的错误:“AttributeError: 'list' object has no attribute 'str'”
    • @amrutha - 我认为需要defaultdict
    猜你喜欢
    • 1970-01-01
    • 2021-12-27
    • 2014-07-21
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    相关资源
    最近更新 更多