我有4列中的数据,如下所示:
day month year value
1 1 1880 1
Etc. for each day in a month for each month for 1880-2013.
Values range from 1 to 8
存储数据
我想计算给定月份和年份中每个“价值”发生的次数。所以像这样:
data = np.loadtxt('/path/to/file', skiprows=1)
def magic_func(data,year,month):
for each in zip(data[:,1], data[:,2]):
if each == (month,year):
#actual magic
E.g。输出:
[(1,0), (2,30), (3,0), (4,0), (5,1), (6,0), (7,0), (8,0)]
所以我想我需要一种方法来根据上面 if 为True的索引对数据的最后一列进行索引,然后计算(可能是np.bincount? )每个“价值”发生多少次。虽然我在代码方面没有取得多大进展......
有人可以帮忙吗?
编辑:我并不热衷于发布任何真实数据,即使是1年就是365个数据点!数据存储在由制表符分隔的.txt文件中,但我也可以将其存储为csv。下面是一个(非常小的)样本。虽然在复制时没有完全保留正确的选项卡,但实际文件显然每个列都在相应的名称下...我最初做的是将数据表单复制到其他地方并使用Excel的Text to Columns来创建我的.txt。
day month year value
1 1 1956 3
2 1 1956 3
3 1 1956 8
4 1 1956 8
5 1 1956 8
6 1 1956 3
7 1 1956 1
8 1 1956 1
9 1 1956 3
10 1 1956 3
11 1 1956 3
12 1 1956 3
13 1 1956 1
14 1 1956 1
15 1 1956 3
16 1 1956 2
17 1 1956 3
18 1 1956 3
19 1 1956 3
20 1 1956 3
21 1 1956 3
22 1 1956 3
23 1 1956 3
24 1 1956 3
25 1 1956 1
26 1 1956 7
27 1 1956 4
28 1 1956 4
29 1 1956 4
30 1 1956 1
31 1 1956 1
我想要的是“价值”下的所有商品,其中“月”是例如在这种情况下,1计算每个唯一“值”发生的次数。在这种特殊情况下,输出为:
[(3,16), (8,3), (1,7), (2,1), (7,1), (4,3)] # format is (value, count)
# or if displaying all possible values
[(1,7), (2,1), (3,16), (4,3), (5,0), (6,0), (7,1), (8,3)]
这有意义吗?
干杯!
答案 0 :(得分:0)
import csv
import collections
def count(infilepath):
answer = collections.defaultdict(lambda : collections.defaultdict(lambda : collections.defaultdict(int)))
with open(infilepath) as infile:
infile.readline()
for line in csv.reader(infile, delimiter='\t'):
*_rest, month, year, value = [int(i) for i in line]
answer[year][month][value] += 1
return answer
用法:
counts = count('/path/to/input')
for year in sorted(counts):
yeard = counts[year]
for month in sorted(yeard):
monthd = yeard[month]
for day in sorted(monthd):
occ = monthd[day]
print("In year %d, in month %d, there were %d occurrences of day %d" %(year, month, val, day))