Итак, короче говоря, назначить (переопределить, если вам нужно) все максимальные значения для группы рядов с флагом = 1, а затем, как только сделано, отбросьте ряды, где флаг не является 1.
Код: Выделить всё
Transform_fields = ('LV1','LV2')
for i in range(len(Transform_fields)):
field_name = Transform_fields[i]
data[field_name + '_org'] = data[field_name]
try:
data[field_name] = data[field_name].astype('float')
data[field_name + '_max'] = data.groupby(['eid'])[field_name].transform(max)
data[field_name + '_max'].fillna(data[field_name + '_org'], inplace = True)
data[field_name] = data.groupby('eid')[field_name + '_max'].transform(lambda x: 0 if (x == 0).any() else x)
except Exception as e:
print('Error reading data from file ' + str(e) + ': \n')
#need to update the value of the field of the record where the PF is 1 in that group
#finally,
data = data[data['pf'] == '1']
< /code>
Некоторые образцы данных (я не могу получить их для форматирования в чистых таблицах с столбцами с подкладкой)-< /p>
eid LV1 LV2 PF
10001 -8888 1
10001 -8888 GRAY 0
10002 -8888 blue 1
10002 -8888 9 0
10003 -8888 22 1
10004 & 55 1
10004 33 68 0
10004 TIM 166 0
< /code>
output ожидается -< /p>
eid LV1 LV2 PF
10001 GRAY 1
10002 -8888 blue 1
10003 -8888 22 1
10004 & 166 1
Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-pandas