如何在不将其称为数据框的情况下对 python 中的列求和
How to sum a column in python without calling it a dataframe
我有输出到 csv 文件的数据:
url date id hits
a 2017-01-01 123 2
a 2017-01-01 123 2
b 2017-01-01 45 25
c 2017-01-01 123 5
d 2017-01-03 678 1
d 2017-01-03 678 7
依此类推,其中 hits 是 id 值在每个 url 的给定日期出现的次数。 (即:ID 号 123 在 2017-01-01 出现 2 次 url "a"。
我需要在点击后创建另一列,称为 "total hits",它捕获给定 url、日期和 ID 值的每天点击总数。所以输出看起来像这样..
url date id hits total_hits
a 2017-01-01 123 2 4
a 2017-01-01 123 2 4
b 2017-01-01 45 25 25
c 2017-01-01 123 5 5
d 2017-01-03 678 1 8
d 2017-01-03 678 7 8
如果不使用 pandas 或 numpy 就可以解决这个问题,那就太棒了。
请帮忙!提前致谢。
标准 python 安装简单。
- 使用逐行读取和拆分来读取和解析文件
- 创建一个
collections.defaultdict(int)
来计算 url/date/id 三元组 的出现次数
- 在额外的列中添加信息
- 回写(我选择csv)
像这样:
import collections,csv
d = collections.defaultdict(int)
rows = []
with open("input.csv") as f:
title = next(f).split() # skip title
for line in f:
toks = line.split()
d[toks[0],toks[1],toks[2]] += int(toks[3])
rows.append(toks)
# complete data
for row in rows:
row.append(d[row[0],row[1],row[2]])
title.append("total_hits")
with open("out.csv","w",newline="") as f:
cw = csv.writer(f)
cw.writerow(title)
cw.writerows(rows)
这是输出文件:
url,date,id,hits,total_hits
a,2017-01-01,123,2,4
a,2017-01-01,123,2,4
b,2017-01-01,45,25,25
c,2017-01-01,123,5,5
d,2017-01-03,678,1,8
d,2017-01-03,678,7,8
我有输出到 csv 文件的数据:
url date id hits
a 2017-01-01 123 2
a 2017-01-01 123 2
b 2017-01-01 45 25
c 2017-01-01 123 5
d 2017-01-03 678 1
d 2017-01-03 678 7
依此类推,其中 hits 是 id 值在每个 url 的给定日期出现的次数。 (即:ID 号 123 在 2017-01-01 出现 2 次 url "a"。
我需要在点击后创建另一列,称为 "total hits",它捕获给定 url、日期和 ID 值的每天点击总数。所以输出看起来像这样..
url date id hits total_hits
a 2017-01-01 123 2 4
a 2017-01-01 123 2 4
b 2017-01-01 45 25 25
c 2017-01-01 123 5 5
d 2017-01-03 678 1 8
d 2017-01-03 678 7 8
如果不使用 pandas 或 numpy 就可以解决这个问题,那就太棒了。
请帮忙!提前致谢。
标准 python 安装简单。
- 使用逐行读取和拆分来读取和解析文件
- 创建一个
collections.defaultdict(int)
来计算 url/date/id 三元组 的出现次数
- 在额外的列中添加信息
- 回写(我选择csv)
像这样:
import collections,csv
d = collections.defaultdict(int)
rows = []
with open("input.csv") as f:
title = next(f).split() # skip title
for line in f:
toks = line.split()
d[toks[0],toks[1],toks[2]] += int(toks[3])
rows.append(toks)
# complete data
for row in rows:
row.append(d[row[0],row[1],row[2]])
title.append("total_hits")
with open("out.csv","w",newline="") as f:
cw = csv.writer(f)
cw.writerow(title)
cw.writerows(rows)
这是输出文件:
url,date,id,hits,total_hits
a,2017-01-01,123,2,4
a,2017-01-01,123,2,4
b,2017-01-01,45,25,25
c,2017-01-01,123,5,5
d,2017-01-03,678,1,8
d,2017-01-03,678,7,8