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

w3nuxt5m  于 5个月前  发布在  Python
关注(0)|答案(4)|浏览(90)
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”与水平=1单独和水平=2单独的总和,然后我需要保存它在另一个CSV文件以这种方式。(有第2列包含每个级别的总和)

Level  Column
1       Sum1
2       Sum2

yfwxisqw

yfwxisqw1#

使用pandas阅读CSV文件后:

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

字符串
您可以使用pandasgroupby()函数将它们按Level分组,并使用sum()函数计算每组的总和,如下所示:

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

输出:

ColumntoSum
Level             
1               22
2               35


将数据保存到CSV文件:

df.to_csv('out.csv', index=True)

vfh0ocws

vfh0ocws2#

df.groupby(['Level']).sum()

字符串
这将产生您的总和

w8f9ii69

w8f9ii693#

试试这个

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)

输出:

Level  Column
0      1      22
1      2      35

lnvxswe2

lnvxswe24#

这可以通过使用itertools.groupby将行按级别分组,然后获取每行的总和来完成。operator.itemgetter函数可以用于有效地提取列值。

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)
    sorted_rows = sorted(reader, key=levelgetter)

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

字符串

相关问题