首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >GroupBy对象中的数据处理。如何添加列?

GroupBy对象中的数据处理。如何添加列?
EN

Stack Overflow用户
提问于 2018-08-13 04:02:14
回答 2查看 57关注 0票数 2

我想在MLB数据集中获取每个投手每场比赛的最后一次投球,并将其标记为True。但是,在GroupBy对象中添加列或修改数据帧时遇到了问题。我怎样才能有效地添加这个专栏呢?

代码语言:javascript
复制
data['last_pitch'] = False
g = data.groupby(['gameString', 'pitcherId'])
for x, pitcher in g:
    pitcher.iloc[-1]['last_pitch'] = True
EN

回答 2

Stack Overflow用户

发布于 2018-08-13 11:04:56

使用GroupBy来实现这一点很有诱惑力。但是,当您不想实际聚合数据时,通常还有其他方法。在这里,您可以在keep='last'中使用pd.Series.duplicated

代码语言:javascript
复制
# data from gyoza

df['last_pitch'] = ~df['pitcherId'].duplicated(keep='last')

print(df)

  gameString pitcherId  last_pitch
0          a         c       False
1          a         c        True
2          b         d       False
3          b         d       False
4          b         d        True

如果您确实希望使用GroupBy,可以使用last方法:

代码语言:javascript
复制
idx = df.reset_index().groupby('pitcherId')['index'].last().values

df['last_pitch'] = df.index.isin(idx)
票数 1
EN

Stack Overflow用户

发布于 2018-08-13 10:57:32

一种方法是找到要使用tail更改的行的所有索引,然后使用loc在原始数据帧中更改它们:

代码语言:javascript
复制
last_rows = data.groupby(['gameString', 'pitcherId']).tail(n=1)
data.loc[last_rows.index, 'last_pitch'] = True
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51812382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档