Вывести максимальное и минимальное значение стоолбцов из файла по категориям

В data.csv файле два столбца. В первом столбце простые числовые значения. Во втором столбце литеры S, C, Q. Нужно на python вывести минимальное и максимальное значение из первого столбца с соответствующим значением второго столбца (т.е. Минимальное S, Минимальное С, Минимальное Q, Максимальное S, Максимальное C, Максимальное Q,)?


Ответы (2 шт):

Автор решения: Deniska SosiSka

Используйте pandas и будет Вам счастье

import pandas as pd

# Загружаем данные из CSV файла
data = pd.read_csv('data.csv', names=['Value', 'Category'])

# Вычисляем минимальные и максимальные значения для каждой категории
min_values = data.groupby('Category')['Value'].min()
max_values = data.groupby('Category')['Value'].max()

# Выводим результаты
print("Минимальные значения:")
print(min_values)
print("\nМаксимальные значения:")
print(max_values)

Вариант без использования сторонних библиотек:

# Открываем CSV файл для чтения
with open('data.csv', 'r') as file:
    # Пропускаем первую строку (заголовок)
    next(file)

    # Инициализируем словари для хранения минимальных и максимальных значений
    min_values = {'S': float('inf'), 'C': float('inf'), 'Q': float('inf')}
    max_values = {'S': float('-inf'), 'C': float('-inf'), 'Q': float('-inf')}

    # Обрабатываем каждую строку файла
    for line in file:
        # Разделяем строку на значение и категорию
        value, category = line.strip().split(',')
        value = float(value)

        # Обновляем минимальные и максимальные значения для каждой категории
        if value < min_values[category]:
            min_values[category] = value
        if value > max_values[category]:
            max_values[category] = value

# Выводим результаты
print("Минимальные значения:")
for category, value in min_values.items():
    print(f"{category}: {value}")

print("\nМаксимальные значения:")
for category, value in max_values.items():
    print(f"{category}: {value}")

→ Ссылка
Автор решения: Дмитрий

Решение нашел самостоятельно. Возможно поможет кому то в будущем. Выкладываю код полностью включая кусочек стримлита.

#импортируем необходимые для проекта библиотеки
import matplotlib.pyplot as plt
import streamlit as st

#подключаем файл с исходными данными
with (open('data.csv') as file):
    #вводим переменные с пассажирами и билетами
    S_bilet = 0
    S_passenger = 0
    S_min = -1
    S_max = 0

    C_bilet = 0
    C_passenger = 0
    C_min = -1
    C_max = 0

    Q_bilet = 0
    Q_passenger = 0
    Q_min = -1
    Q_max = 0

    min_valueS = 0

#разделяем строку на значения и категоию
    for line in file:
        data = line.split(',')

        #исключаем ID пассажира
        if data[0] == 'PassengerId':
            continue

        #высчитываем количество пассажиров с портом пасадки S и общую сумму стоимости билетов
        if data[12].strip() == 'S':
            S_passenger = S_passenger + 1
            S_bilet = S_bilet + float(data[10])

            if (S_min > float(data[10]) or S_min == -1) and float(data[10]) != 0:
                S_min = float(data[10])
            if S_max < float(data[10]):
                S_max = float(data[10])

        #высчитываем количество пассажиров с портом пасадки С и общую сумму стоимости билетов
        if data[12].strip() == 'C':
            C_passenger = C_passenger + 1
            C_bilet = C_bilet + float(data[10])

            if (C_min > float(data[10]) or C_min == -1) and float(data[10]) != 0:
                C_min = float(data[10])
            if C_max < float(data[10]):
                C_max = float(data[10])

        # высчитываем количество пассажиров с портом пасадки Q и общую сумму стоимости билетов
        if data[12].strip() == 'Q':
            Q_passenger = Q_passenger + 1
            Q_bilet = Q_bilet + float(data[10])

            if (Q_min > float(data[10]) or Q_min == -1) and float(data[10]) != 0:
                Q_min = float(data[10])
            if Q_max < float(data[10]):
                Q_max = float(data[10])



#вводим переменные средней, минимальной и максимальной стоимости по портам посадки и присваиваем им значение из вычислений выше
averageS = S_bilet / S_passenger
averageC = C_bilet / C_passenger
averageQ = Q_bilet / Q_passenger
minimumS = round(S_min,2)
minimumC = round(C_min,2)
minimumQ = round(Q_min,2)
maximumS = round(S_max,2)
maximumC = round(C_max,2)
maximumQ = round(Q_max,2)

#подключаем медиафал, заголовок и выподающий список из библиотеки стримлита
st.image('Titanic.jpg')
st.header('какой то текст заголовка')
st.write('Вычисление стоимости билета у пассажиров по каждому пункту посадки.')
option = st.selectbox('Выбирите категорию стоимости билета', ['Средняя', 'Минимальная', 'Максимальная'])
pport = ['Порт S', 'Порт C', 'Порт Q']

#если выбрана категория средней стоимости то переменная avg_port равна соответствующим переменным по портам посадки
if option == "Средняя":
    avg_port = [averageS, averageC, averageQ]

if option == "Минимальная":
    avg_port = [minimumS, minimumC, minimumQ]

if option == "Максимальная":
    avg_port = [maximumS, maximumC, maximumQ]

data = {'Порт посадки': pport, 'Cтоимость билета': avg_port}
st.table(data)

fig = plt.figure(figsize=(8, 3))
plt.bar(pport, avg_port)
plt.xlabel("Порт посадки")
plt.ylabel("Стоимость билета")
plt.title("Средняя стоимость по портам посадки")

st.pyplot(fig)
→ Ссылка