繁体   English   中英

如何使用 csv 文件计算 python 中列的总和(但取特定行)?

[英]How can calculate the sum of a column (but taking specific rows of it) in python using csv file?

Level     ColumntoSum
1           4
2          10
1          3
2          23
1          15
2          2

所以想象这是我的 CSV 文件,它包含 2 列 [Level, ColumnToSum],在 Level =[1,2,1,2,1,2] 中,ColumnToSum 在每个级别旁边都有随机数。

我需要的是单独计算“ColumntoSum”的总和,Level=1 和 level=2 的总和然后我需要以这种方式将它保存在另一个 CSV 文件中。 (第二列包含每个级别的总和)

Level  Column
1       Sum1
2       Sum2

在使用pandas阅读您的 CSV 文件后:

import pandas as pd
df=pd.read_csv('name_of_your_file.csv')

您可以使用pandas groupby() function 将它们按Levelsum() function 来计算每个组的总和,如下所示:

df=df.groupby('Level').sum()
display(df)

OUTPUT:

       ColumntoSum
Level             
1               22
2               35

将数据保存到 CSV 文件:

df.to_csv('out.csv', index=True) 
df.groupby(['Level']).sum()

这将产生你的总和

尝试这个

import csv

with open('data.csv') as fp:
    reader = csv.DictReader(fp)
    res = {}
    for row in reader:
        res.setdefault(row['Level'], []).append(int(row['ColumntoSum']))

with open('output.csv', 'w') as fw:
    writer = csv.writer(fw)
    writer.writerow(('Level', 'Column'))
    for k, v in res.items():
        writer.writerow((k, sum(v)))

使用pandas

import pandas as pd

df = pd.read_csv('data.csv') 
df = df.groupby('Level', as_index=False)['ColumntoSum'].sum().rename(columns={'ColumntoSum': 'Column'})
print(df)

Output:

   Level  Column
0      1      22
1      2      35

这可以使用itertools.groupby按级别对行进行分组,然后获得每行的总和。 operator.itemgetter function 可用于有效地提取列值。

import csv 
import itertools
import operator


# Define functions to fetch the columns we want
levelgetter = operator.itemgetter(0)
col2sumgetter = operator.itemgetter(1)

with open('data.csv', newline='') as f:
    reader = csv.reader(f)
    # Skip header row
    next(reader)

    # sort the rows by level (required for groupby)
    sort_key = lambda row: levelgetter(row)     
    sorted_rows = sorted(reader, key=sort_key)

    # Loop over the groups and sum the values
    for level, group in itertools.groupby(sorted_rows, key=sort_key):
        total = sum(int(col2sumgetter(row)) for row in group)
        print(level, total)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM