我有2个groupby数据帧(AUS_2016和df_pitLaps,两者都按驱动程序ID分组),它们具有相同的列(' lap'),我正在尝试将AUS_2016子集化,使其不包含值每个驱动程序的df_pitLaps中的lap列。
简单来说,我想为每个车手的特定比赛过滤掉pitlaps(持续进站的圈数)
我得到一个按照驱动程序ID分组的True值数据框,但我不知道下一步该怎么做。
AUS_2016:
df_pitLaps:
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!=比较失败;这会提高 将来会出错。
以下数据框。我不知道如何继续从这里继续只为每个驱动程序过滤圈是真的(不是坑圈)。
解决方案:
我设法通过使用另一个不需要groupby的方法来解决它。我" vlooked-up"带有凹坑的圈到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)]
答案 0 :(得分:0)
如果您只想排除AUS_2016
中df_pitLaps
中显示的所有圈数,只需完成以下操作:
AUS_2016[~AUS_2016['lap'].isin(df_pitLaps['lap'].unique())]