Полагаю, у вас есть значения столбца «Сокращение» в виде строк (включая знак%). Если вы используете .min()
для этого, то значения будут обрабатываться как строки, а для строк будет рассчитываться минимум. Вместо этого, если вы преобразуете значения столбца «Сокращение» в float
и применяете .min()
, вы сможете достичь того, что вам нужно.
df = pd.DataFrame({'Date': ['14-06-1995', '15-06-1995', '16-06-1995', '17-06-1995', '18-06-1995', '19-06-1995', '20-06-1995'],
'Category': ['A1', 'A1', 'A1', 'A2', 'A2', 'A3', 'A3'],
'Reduction': ['-1.91%', '-1.32%', '-12.34%', '-2.12%', '-1.78%', '-1.24%', '-1.20%']})
# strip off the '%' sign and convert to float
df['Reduction'] = df['Reduction'].str.rstrip('%').astype('float')
# group by and assign the min value to column 'min'
new_df = df.groupby('Category')['Reduction'].agg(min=min).reset_index()
# convert the 'min' column value back to string and append '%' sign
new_df['min'] = new_df['min'].astype(str)+'%'
print(new_df)
Вывод:
Category min
0 A1 -12.34%
1 A2 -2.12%
2 A3 -1.24%
Если вы хотите выполнить это преобразование при чтении вашего фрейма данных, вы можете сделать это, добавив converters
к вашим pd.read_csv()
параметрам.
def convert_percentage(percentage):
return float(percentage.rstrip('%'))
df = pd.read_csv('file.csv', converters={'Reduction': convert_percentage})
Это то, что вы ожидаете? Или ваша проблема отличается от того, что я изложил выше?