我有两个groupby数据帧(AUS\u 2016和df\u pitLaps,都是按驱动程序ID分组的),它们具有相同的列('lap'),我正在尝试将AUS\u 2016子集,以便它不包含每个驱动程序df\u pitLaps中的lap列中的值
简单地说,我想为每个车手的特定比赛过滤掉pitlaps(带进站的圈数)
我得到了一个按驱动程序ID分组的真值的数据帧,但我不知道下一步如何继续
澳大利亚大学2016:
数据框陷阱:
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.
在数据帧下面。我不知道如何继续从这里只过滤圈为每个司机是真的(不是坑圈)
解决方案:
我设法通过使用另一种不需要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)]
如果您只想排除
AUS_2016
中出现在df_pitLaps
中的所有圈数,只需通过以下方法完成:相关问题 更多 >
编程相关推荐