sample = {'user_id': ['u_id1', 'u_id2', 'u_id3','u_ud4'],
'len_1': [150, 'NA', 50, 50],
'len_2': [150, 200, 50, 60],
'len_3': [200, 210, 90, 50],
'len_4': [200, 205, 90, 40],
'speed_1': [140, 'NA', 'NA','NA'],
'speed_2': [140, 215, 90, 'NA'],
'speed_3': ['NA', 210, 95, 50],
'speed_4': ['NA', 215, 95, 30],
'value_1': ['NA', 215, 'NA', 'NA'],
'value_2': [130, 'NA', 95, 50],
'value_3': [120, 'NA', 'NA', 40],
'value_4': ['NA', 'NA', 90, 10]}
df = pd.DataFrame.from_dict(sample)
df.set_index('user_id')
df
У меня есть приведенный выше пример фрейма данных.Он имеет значения «NA» для некоторых столбцов.
Я хочу заполнить значения 'NA'.Пример: -
«u_id1» имеет «NA» при «speed_3» и «speed_4», поэтому «speed_3 =» speed_4 = min {speed_1, speed_2,speed_3, speed_4}
=> 140
«u_id2» имеет «NA 'at' len_1 ', поэтому' len_1 = min {len_1, len_2, len_3, len_4}
=> 200.
Если возможно, я хочу проверить процент значений 'NA'.т.е. за {len_1, len_2, len_3, len_4}
, за {speed_1, speed_2,speed_3, speed_4}
и т. д. для каждого пользователя.Так что я могу решить, заполнять ли минимальным значением или нет.например, если 75% из {value_1, value_2, value_3, value_4} равны 'NA', то не заполняйте значениями NA (потому что буква, которую я хочу отфильтровать).
Ожидаемый результат должен выглядеть примерно так
sample = {'user_id': ['u_id1', 'u_id2', 'u_id3','u_ud4'],
'len_1': [150, 200, 50, 50],
'len_2': [150, 200, 50, 50],
'len_3': [200, 210, 90, 50],
'len_4': [200, 205, 90, 50],
'speed_1': [140, 215, 95, 30],
'speed_2': [140, 215, 95, 30],
'speed_3': [140, 215, 95, 50],
'speed_4': [140, 215, 95, 30],
'value_1': [120, 215, 90, 10],
'value_2': [130, 'NA', 95, 50],
'value_3': [120, 'NA', 90, 40],
'value_4': [120, 'NA', 90, 10]}
df_out = pd.DataFrame.from_dict(sample)
Примечание: для пользователя 'u_id2' { value_2,value_3, value_4}
остаются NA, поскольку 75% из них были значениями 'NA'
Я ценю любую помощь покак подойти к этому.