我想在MLB数据集中获取每场比赛每个投手的最后投球并将其标记为True。但是,我在添加列或修改GroupBy对象中的数据框时遇到麻烦。如何有效添加此列?
Double.floatValue()
答案 0 :(得分:1)
为此使用GroupBy
很诱人。但是,当您不希望实际汇总数据时,通常会有其他方法。在这里,您可以将pd.Series.duplicated
与keep='last'
结合使用:
# 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
方法:
idx = df.reset_index().groupby('pitcherId')['index'].last().values
df['last_pitch'] = df.index.isin(idx)
答案 1 :(得分:0)
一种方法是使用tail
查找要更改的行的所有索引,然后使用loc
在原始数据框中进行更改:
last_rows = data.groupby(['gameString', 'pitcherId']).tail(n=1)
data.loc[last_rows.index, 'last_pitch'] = True