python, tổng giá trị từ một số hàng

Oct 15 2020

Tôi có hàng trăm tệp csv như sau:

Tôi muốn làm gì để tính tổng của mỗi hàng cho các cột A_*và B_*tương ứng.

Ví dụ file_1.csv, tôi sử dụng mã sau:

#for file_1.csv

import pandas as pd 
df = pd.read_csv('file_1.csv')
df["A_sum"]=df["A_1"]+df["A_2"]+df["A_3"]
df["B_sum"]=df["B_1"]+df["B_2"]
df.to_csv (r'output_file_1.csv', index = False, header=True)

Vì tôi phải xử lý hàng trăm tệp như thế này, Tôi nên sửa đổi mã như thế nào để nó có thể tự động xác định có bao nhiêu Acột và bcột trong tệp csv và tính tổng?

Ví dụ: nó có thể tạo mã file_3.csvnhư thế này:

#for file_3.csv

import pandas as pd 
df = pd.read_csv('file_3.csv')
df["A_sum"]=df["A_1"]+df["A_2"]
df["B_sum"]=df["B_1"]+df["B_2"]
df.to_csv (r'output_file_3.csv', index = False, header=True)

Cảm ơn rât nhiều.

Trả lời

2 QuangHoang Oct 15 2020 at 00:56

Bạn có thể sử dụng filter:

ret_df = pd.DataFrame()

ret_df['A_sum'] = df.filter(like='A_').sum(1)
ret_df['B_sum'] = df.filter(like='B_').sum(1)

Hoặc sử dụng regex và cả một vòng lặp:

for type in ['A','B']:
    df[f'{type}_sum'] = df.filter(regex=f'^{type}_').sum(1)