Группировка данных по столбцам в csv файле

Всем привет! Подскажите, пожалуйста, как сгруппировать значения в csv? Привожу пример. В файле csv есть столбцы с именованием городов: Москва Калининград Курск

Нужно получить таблицу с группировкой по столбцам:

Москва Калининград Курск 
  2         3        1
  3         1        1
  4         2        3
  5         0        0

По результатам выполнения функции получаю следующие значения:

Москва, 2
Калининград, 3
Курск, 1

На просторах Интернета ничего подходящего не нашел, а сам не смог придумать (опыта и знаний не хватает). Прошу Вашей помощи! Исходник:

     import csv 

     with open(f'tmp.csv', 'w') as file:
        writer = csv.writer(file)
        writer.writerow(('Москва','Калининград', 'Курск'))
        
        data = members
        json_str = json.dumps(data)
        resp = json.loads(json_str)

        def count(cities, raw):
            result = {}
            for city in cities:
                result[city] = raw.count(city)
            return result

        data = resp
        raw = []
        uniq_city = set()

        for item in data['items']:
            try:
                city = item['city']['title']
            except KeyError:
                continue
            raw.append(city)
            uniq_city.add(city)
        result = count(uniq_city, raw)

        for key, value in result.items():
            key_city = (f'{key}')
            value_city=(f'{value}')             
            
            with open(f'tmp.csv', 'a', encoding='utf-8', newline='') as file:
                writer = csv.writer(file,delimiter=",",lineterminator="\n")
                if key_city == 'Москва':
                    writer.writerow((value_city))
                elif key_city == 'Калининград':
                    writer.writerow((value_city))             
                elif key_city == 'Курск':
                    writer.writerow((value_city))
                else:
                    pass

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

Автор решения: Sergej Polzikov

Насколько я понимаю должно получится что-то такое:

import pandas as pd
df = pd.read_csv('tmp.csv') # читаем csv

# Преобразовываем файл для более удобной обработки
temp = [] 
# temp = [('Москва', 2), ('Москва', 3), ('Москва', 5), ('Калининград', 3), ('Калининград', 1), ('Калининград', 0), ('Курск', 1), ('Курск', 1), ('Курск', 0)]
for ele in df.columns:
  for val in df[ele]:
    row = (ele, val)
    temp.append(row)

# создаем пустой датафрейм со столбцами "city" и "value"
clean_df = pd.DataFrame(temp, columns=['city', 'value'])
# группируем получившийся датафрейм по город
result = clean_df.groupby(["city"]).sum()
result.to_csv('result.csv')
→ Ссылка
Автор решения: Наталья

Решение:

import datetime
import pandas as pd

filename='./results/tmp.csv'
cur_time = datetime.datetime.now().strftime('%d_%m_%Y_%H_%M')
df = pd.read_csv(filename, sep=',', encoding ='utf-8')

temp = [] 

for ele in df.columns:
for val in df[ele]:
    row = (ele, val)
    temp.append(row)

clean_df = pd.DataFrame(temp, columns=['city', 'value'])
clean_df = pd.cov = pd.read_csv(filename, sep=',', header=0)

result = clean_df.groupby(["city"]).mean()

total = result.T
total.to_csv(filename)
→ Ссылка