如何使用 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 文件中。 (让第2列包含每个级别的总和)
Level Column
1 Sum1
2 Sum2
df.groupby(['Level']).sum()
这将生成您的总和
使用 pandas
阅读您的 CSV 文件后:
import pandas as pd
df=pd.read_csv('name_of_your_file.csv')
您可以使用pandas
groupby()
函数将它们按Level
分组,并使用sum()
函数计算每组的总和,如下所示:
df=df.groupby('Level').sum()
display(df)
输出:
ColumntoSum
Level
1 22
2 35
正在将您的数据保存到 CSV 文件:
df.to_csv('out.csv', index=True)
试试这个
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
这可以使用 itertools.groupby to group the rows by level and then obtaining the sum for each row. The 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)
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)
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 文件中。 (让第2列包含每个级别的总和)
Level Column
1 Sum1
2 Sum2
df.groupby(['Level']).sum()
这将生成您的总和
使用 pandas
阅读您的 CSV 文件后:
import pandas as pd
df=pd.read_csv('name_of_your_file.csv')
您可以使用pandas
groupby()
函数将它们按Level
分组,并使用sum()
函数计算每组的总和,如下所示:
df=df.groupby('Level').sum()
display(df)
输出:
ColumntoSum
Level
1 22
2 35
正在将您的数据保存到 CSV 文件:
df.to_csv('out.csv', index=True)
试试这个
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
这可以使用 itertools.groupby to group the rows by level and then obtaining the sum for each row. The 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)
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)