Вам следует использовать pandas
для этих задач.Google документирует себя для конкретных случаев (строки без заголовков в CSV-файле), я приведу простой пример:
import pandas as pd
Сначала вы загружаете CSV, и это действительно зависит от его формата, поэтому может потребоваться изменить разделитель,Я взял форматирование csv из ваших примеров данных (несколько пробелов):
dataframe = pd.read_csv(filepath, sep='\s+')
Затем вы группируете данные по набору столбцов:
groupby = dataframe.groupby(['string1','string2'])
print(groupby.groups)
, который возвращает объект «DataFrameGroupBy», которыйпо сути, это список (кортеж значений столбцов, фрейм данных, соответствующих этим данным) в оболочке.
Затем вы применяете пользовательскую функцию к этим строкам, чтобы создать новую строку:
def add_average_velocity(input_rows):
input_rows['avg_velocity'] = (input_rows['rate']/input_rows['distance']).mean()
return input_rows
new_dataframe = dataframe.groupby(['string1','string2']).apply(add_average_velocity).reset_index()
print(new_dataframe)
Или, если вы хотите полностью избавиться от всех старых данных и сохранить только новые:
def add_average_velocity(input_rows):
output_data = pd.Series({'velocity':(input_rows['rate']/input_rows['distance']).mean()})
# you can skip making a pd.Series objects if you are okay with having the data unnamed in resulting dataframe. You can always rename columns later anyway.
return output_data
new_dataframe = dataframe.groupby(['string1','string2']).apply(add_average_velocity).reset_index()
print(new_dataframe)