Итак, короче говоря, назначить (переопределить, если вам нужно) все максимальные значения для группы рядов с флагом = 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>
Некоторые образцы данных, показанные этой простой программой ниже, чтобы отобразить пример ввода DF и полученный DF -< /p>
import pandas as pd
df_in = pd.DataFrame({'eid': [10001, 10001, 10002, 10002, 10003, 10004, 10004, 10004],
'LV1': ['', -8888, -8888, -8888, -8888, '&', 33, 'TIM'],
'LV2': [-8888, 'GRAY', 'blue', 9, 22, 55, 68, 166],
'PF': [1, 0, 1, 0, 1, 1, 0, 0]})
print('Original Dataframe:')
print(df_in)
df_out = pd.DataFrame({'eid': [10001, 10002, 10003, 10004],
'LV1': ['', -8888, -8888, '&'],
'LV2': ['GRAY', 'blue', 22, 166],
'PF': [1, 1, 1, 1]})
print("\nTransformed Dataframe:")
print(df_out)
Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-pandas