我有两个变量 - animals
和food
;如果我打印它们看起来像
var1 var2
pig acorn
pig acorn
pig carrot
pig potato
pig acorn
pig carrot
dog meat
dog acorn
dog carrot
dog potato
dog carrot
dog meat
cat meat
cat fish
cat carrot
cat potato
依旧......
我希望这些数据以下列格式存储在新的CSV文件中(但无法弄清楚如何操作):
animals food count
pig acorn 15
pig carrot 7
pig potato 10
dog acorn 2
dog meat 10
dog potato 1
依旧......
换句话说,我希望animals
变量中的观察值与food
变量中的不同类型的项目重复出现的次数完全相同,并将聚合得分放在一个新变量中。例如,如果有50次出现pig
,其中30次是acorn
,其中10次是carrot
和10次potato
,我希望它看起来像这样:
pig acorn 30
pig carrot 10
pig potato 10
答案 0 :(得分:4)
首先 - 这与CSV本身没什么关系。如果你想计算这里的值,使用字典是一个好主意,所以你需要的是(我假设动物和食物是列表):
counts = {}
for animal, food in zip(animals, foods):
counts.setdefault((animal, food), 0)
counts[(animal, food)] += 1
在这个循环之后,你将得到一个字典,其中的键是(动物,食物)元组和值。所以你可以把它们写成csv,如:
for ((animal, food), count) in counts.items():
csv_writer.writerow([animal, food, count])
答案 1 :(得分:3)
看起来你不知道Counter
的{{1}}类collections
。这是documentation。
如果您想计算变量对:
c = Counter(zip(var1, var2))
要编写结果,请使用zetciu answer中报告的csv
库,但请记住Counter实例为dict
。
with open('result.csv', 'wb') as csvfile:
csv_writer = csv.writer(csvfile)
csv_writer.writerow(["animals", "food", "count"])
for pair,count in c.items():
animal, food = pair
csv_writer.writerow([animal, food, count])