python2.7基于另一个groupby的groupby数据帧的子集

2024-05-14 01:21:07 发布

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

我有两个groupby数据帧(AUS\u 2016和df\u pitLaps,都是按驱动程序ID分组的),它们具有相同的列('lap'),我正在尝试将AUS\u 2016子集,以便它不包含每个驱动程序df\u pitLaps中的lap列中的值

简单地说,我想为每个车手的特定比赛过滤掉pitlaps(带进站的圈数)

我得到了一个按驱动程序ID分组的真值的数据帧,但我不知道下一步如何继续

澳大利亚大学2016:

enter image description here

数据框陷阱:

enter image description here

def clean_laps_no_pitlaps(data):
    """Filters out the pit laps."""
    df_pitLaps = df_pitStops.loc[df_pitStops['raceId'].isin(data['raceId'])]
    df_pitLaps.groupby("driverId")["lap"]
    data = data.groupby("driverId")["lap"]

    nopitlaps = lambda x: (
        [(lap != pitlap) for pitlap, lap in itertools.izip(x, data)])

    no_pitlaps_in_data = pd.DataFrame(data.apply(nopitlaps))

    return no_pitlaps_in_data

调用函数:

clean_laps_no_pitlaps(AUS_2016)

这将导致以下错误:

DeprecationWarning: elementwise != comparison failed; this will raise an error in the future.

在数据帧下面。我不知道如何继续从这里只过滤圈为每个司机是真的(不是坑圈)

enter image description here

解决方案:

我设法通过使用另一种不需要groupby的方法来解决这个问题。我把进站站的圈数“找”到df,然后把这些排排除在外

def no_pitlaps(df, df_pitLaps):
    """Returns a dataframe that excludes the pit laps of each driver"""

    data_pitlaps_mapped = pd.merge(df, df_pitLaps[['driverId', 'stop', 'lap']], how='left',
        left_on=['driverId','lap'], right_on=['driverId','lap'])

    return data_pitlaps_mapped.loc[~data_pitlaps_mapped.index.isin(data_pitlaps_mapped.dropna(subset = ['stop']).index)] 

Tags: the数据noindfdata驱动程序groupby