Python2.7:根据groupby中的条件从数据帧中筛选出组

2024-05-19 10:22:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe,我想进一步过滤dataframe,以便只包含一个组,该组的行在列中没有特定的值

例如,在数据帧中,由于汉密尔顿在第1圈的第3圈有超车,我想从下面的数据帧中删除汉密尔顿的第1圈的所有记录。你知道吗

我想先做一个groupby,然后再做一个get group,遍历组中的每一行,在“clear lap”中检测非空值列,并在新列中为groupby中的所有行标记“yes”,然后筛选出该组。你知道吗

有没有一种更快的方法对数据帧进行子集设置?你知道吗

数据帧:

    name                   driverRef stint  tyre      lap   pos     clear lap?
0   Australian Grand Prix   vettel  1.0     Super soft  2   1        NaN
1   Australian Grand Prix   vettel  1.0     Super soft  3   1        NaN
2   Australian Grand Prix   vettel  1.0     Super soft  4   1        NaN
3   Australian Grand Prix   ham     1.0     Super soft  2   3        NaN
4   Australian Grand Prix   ham     1.0     Super soft  3   2        overtook
5   Australian Grand Prix   ham     1.0     Super soft  4   2        NaN

Tags: 数据dataframeget记录nansofthamclear
1条回答
网友
1楼 · 发布于 2024-05-19 10:22:29

我认为您需要通过筛选获取所有组,然后通过^{}再次筛选:

注意:谢谢,@Vivek Kalyanarangan的改进^{}。你知道吗

a = df.loc[df['clear lap?'].notnull(), 'driverRef'].unique()
print (a)
['ham']

df = df[~df['driverRef'].isin(a)]
print (df)
                    name driverRef  stint        tyre  lap  pos clear lap?
0  Australian Grand Prix    vettel    1.0  Super soft    2    1        NaN
1  Australian Grand Prix    vettel    1.0  Super soft    3    1        NaN
2  Australian Grand Prix    vettel    1.0  Super soft    4    1        NaN

另一个解决方案,slowier:

df = df[df['clear lap?'].isnull().groupby(df['driverRef']).transform('all')]

或最慢的:

df = df.groupby('driverRef').filter(lambda x: x['clear lap?'].isnull().all())

相关问题 更多 >

    热门问题