对于像这样的匹配问题,一种可能是进行完全合并,然后使用布尔级数对满足条件的所有行(对于该行)进行子集合并,并找到
max
或
min
在所有可能的匹配中。因为这需要稍微不同的列和不同的函数,所以我将操作分为两段非常相似的代码,一段处理1/蓝色,另一段处理1/红色。
先做些家务,把事情安排在约会时间
import pandas as pd
df['date'] = pd.to_datetime(df['date'])
df['colourDate'] = pd.to_datetime(df['colourDate'])
计算每行时间之间1/red的最小像素
# Subset of rows we need to do this for
dfmin = df[df.type.eq(1) & df.colour.eq('red')].reset_index()
# To each row merge all rows from the original DataFrame
dfmin = dfmin.merge(df[['date', 'minPixel']], how='cross')
# If pd.version < 1.2 instead use:
#dfmin = dfmin.assign(t=1).merge(df[['date', 'minPixel']].assign(t=1), on='t')
# Only keep rows between the dates, then among those find the min minPixel