python-3.x - 在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])
但两者都不起作用。我可以知道怎么做吗?
解决方案
使用带有最后一个值和的语法糖 - 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']})
推荐阅读
- excel - 用户的用户表单登录 - 错误:从工作簿问题中选择
- apache-kafka - 卡夫卡流在窗口和重新启动期间丢弃消息
- c++ - c++中的内存管理优化
- spring-data-neo4j - 对 Neo4j 4.0 版的可分页支持
- python - 是否可以加快 numpy 中非常大的数组的计算速度?
- uber-api - 如何获取服务器令牌以访问 Uber 的 API?
- html - 自动高度不适用于 HTML 中基于文本的 div
- android - Flutter MultiBlocProvider 性能
- javascript - webpack 和两个不同的来源网站
- google-apps-script - Apps 脚本 getEventById() 返回 null