Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,如何使用csv文件计算列的总和(但取其中的特定行)?_Python_Csv_File_Sum_Calculated Columns - Fatal编程技术网

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

在python中,如何使用csv文件计算列的总和(但取其中的特定行)?,python,csv,file,sum,calculated-columns,Python,Csv,File,Sum,Calculated Columns,假设这是我的CSV文件,它包含两列[Level,ColumnToSum],在Level=[1,2,1,2,1,2]中,ColumnToSum在每个级别旁边都有随机数 我需要的是计算级别为1的“ColumntoSum”和级别为2的“ColumntoSum”之和,然后我需要以这种方式将其保存在另一个CSV文件中。(第二列包含每个级别的总和) 这将在使用pandas读取CSV文件后生成您的总和: df.groupby(['Level']).sum() 您可以使用pandasgroupby()函数按L

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

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


这将在使用
pandas
读取CSV文件后生成您的总和:

df.groupby(['Level']).sum()
您可以使用
pandas
groupby()
函数按
Level
对它们进行分组,并使用
sum()
函数计算每个组的总和,如下所示:

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

df=df.groupby('Level').sum()
display(df)
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)
将数据保存到CSV文件:

       ColumntoSum
Level             
1               22
2               35
试试这个

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

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)))
输出:

df=df.groupby('Level').sum()
display(df)
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)
可以使用按级别对行进行分组,然后获得每行的总和。该函数可用于高效提取列值

导入csv
进口itertools
进口经营者
#定义函数以获取所需的列
levelgetter=operator.itemgetter(0)
col2sumgetter=operator.itemgetter(1)
将open('data.csv',换行符='')作为f:
读卡器=csv。读卡器(f)
#跳过标题行
下一位(读者)
#按级别对行排序(groupby需要)
排序键=lambda行:levelgetter(行)
已排序的行=已排序的(读卡器,键=排序键)
#在组上循环并求和值
对于级别,在itertools.groupby中分组(已排序的行,键=排序键):
总计=组中行的总和(int(COL2SUMGETER(行))
打印(级别、总数)

您可以使用dictionary和
Level
作为键来求和,但需要
才能让
-loop从cvs中读取行/行。使用
熊猫
   Level  Column
0      1      22
1      2      35