gpt4 book ai didi

Python2.7 : Subset dataframe based on condition in first row of groupby

转载 作者:行者123 更新时间:2023-11-30 22:19:55 25 4
gpt4 key购买 nike

我想根据仅 groupby 中的第一行受到的条件对 pandas 数据框进行子集化。

数据帧按“name”、“driverRef”、“tyre”、“stint”分组

例如,在下面的df中,因为阿隆索在第12位置开始了他的第二站,所以我想从df中删除阿隆索的所有记录。

    name                   driverRef stint  tyre      lap   pos     
0 Australian Grand Prix alonso 1.0 Super soft 1 9
1 Australian Grand Prix alonso 1.0 Super soft 2 9
2 Australian Grand Prix alonso 1.0 Super soft 3 9
3 Australian Grand Prix alonso 2.0 Super soft 20 12
4 Australian Grand Prix alonso 2.0 Super soft 21 11
5 Australian Grand Prix alonso 2.0 Super soft 22 10

预期输出:

    name                   driverRef stint  tyre      lap   pos     
0 Australian Grand Prix alonso 1.0 Super soft 2 9
1 Australian Grand Prix alonso 1.0 Super soft 3 9
2 Australian Grand Prix alonso 1.0 Super soft 4 9

我尝试了这个,但没有正确实现效果:

df.loc[df.groupby(['name', 'driverRef', 'tyre', 'stint']).first().reset_index()['position'].isin(list(range(1,11))).index]

编辑:我的代码确实有效,但请参阅 @jezrael 的答案以获得更简洁/更好的编写方式。

最佳答案

你真的很亲密,需要transform对于与原始 df 长度相同的返回系列:

s = df.groupby(['name', 'driverRef', 'tyre', 'stint'])['pos'].transform('first')
print (s)
0 9
1 9
2 9
3 12
4 12
5 12
Name: pos, dtype: int64

df = df[s.isin(list(range(1,11)))]
print (df)
name driverRef stint tyre lap pos
0 Australian Grand Prix alonso 1.0 Super soft 1 9
1 Australian Grand Prix alonso 1.0 Super soft 2 9
2 Australian Grand Prix alonso 1.0 Super soft 3 9

关于Python2.7 : Subset dataframe based on condition in first row of groupby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48972361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com