import pandas as pd
import numpy as np
df=pd.DataFrame({
'time':[8,8,8,6,6,6,3,3,3],
'code':[30,31,32,62,61,63,56,57,55],
'unit':['T1','T1','T1','T2','T2','T2','T3','T3','T3'],
})
print(df)
print()
def lowfilter(df,c1='time',c2='code'):
ser=df.groupby(df[c1])[c2].min()
ser = ser.reset_index()
df_tmp=pd.DataFrame()
for idx in ser.index:
df_tmp = pd.concat([df_tmp,df[(df[c1]==ser.iloc[idx][c1]) & (df[c2]==ser.iloc[idx][c2])]])
return df_tmp
print(lowfilter(df))
результат:
time code unit
0 8 30 T1
1 8 31 T1
2 8 32 T1
3 6 62 T2
4 6 61 T2
5 6 63 T2
6 3 56 T3
7 3 57 T3
8 3 55 T3
time code unit
8 3 55 T3
4 6 61 T2
0 8 30 T1
Предыдущий код очень медленный, оптимизация выполнена:
def lowfilter(df,c1='time',c2='code'):
ser=df.groupby(df[c1])[c2].min()
ser = ser.reset_index()
return pd.merge(df,ser)
выводит тот же результат, но в 1000 раз быстрее