我有一个文件,其中有来自83个气象站和每个气象站101年的逐日降水数据。我想确定每个车站每年NaN的数量。
作为一个简短的例子,让我们假设我只有一个站,只关心1年的数据,2009年。
如果我有这个:
station_id year month 1 2 3
210018 2009 1 5 6 8
210018 2009 2 NaN NaN 6
210018 2009 12 8 5 6
我想谈一谈:
station_id year month 1 2 3
210018 2009 1 5 6 8
210018 2009 2 NaN NaN 6
210018 2009 3 NaN NaN NaN
210018 2009 4 NaN NaN NaN
210018 2009 5 NaN NaN NaN
210018 2009 6 NaN NaN NaN
210018 2009 7 NaN NaN NaN
210018 2009 8 NaN NaN NaN
210018 2009 9 NaN NaN NaN
210018 2009 10 NaN NaN NaN
210018 2009 11 NaN NaN NaN
210018 2009 12 8 5 6
因此,我的电台需要12排的全部12个月和一年来与每一个。再一次,我在实际例子中有101年了。
我试图使用以下代码:
df_indexed=df.set_index(['year'])
new_index=np.arange(1910,2011,1)
idx=pd.Index(new_index)
df2=df_indexed.reindex(idx, method=None)
但是它返回一个长的错误,以
ValueError: cannot reindex from a duplicate axis
我希望这是有意义的。
发布于 2015-02-23 21:05:33
我可能要做的是创建一个目标MultiIndex,然后使用它进行索引。例如:
>>> target_ix = pd.MultiIndex.from_product([df.station_id.unique(),
np.arange(1910, 2011, 1), np.arange(1,13)],
names=["station_id", "year", "month"])
>>> df = df.set_index(["station_id", "year", "month"])
>>> new_df = df.loc[target_ix]
>>> new_df.tail(24)
1 2 3
station_id year month
210018 2009 1 5 6 8
2 NaN NaN 6
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
6 NaN NaN NaN
7 NaN NaN NaN
8 NaN NaN NaN
9 NaN NaN NaN
10 NaN NaN NaN
11 NaN NaN NaN
12 8 5 6
2010 1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
6 NaN NaN NaN
7 NaN NaN NaN
8 NaN NaN NaN
9 NaN NaN NaN
10 NaN NaN NaN
11 NaN NaN NaN
12 NaN NaN NaN
如果您愿意的话,此时您可以.reset_index()
。
发布于 2015-02-23 21:00:44
编辑
这不是熊猫的答案:当我开始回答的时候,问题并没有给熊猫贴上标签,我会让它在这里,因为它能让某人受益。
假设您使用dict组织数据,其中键是(station_id, year, month)
的元组,值是数据点的数组??您可以使用collections.defaultdict
。
>>> data = defaultdict(lambda: [None, None, None])
>>> data[(210018, 2009, 3)]
[None, None, None]
你可能是在读文件,我不会帮你做所有的作业--给你一些提示。
for line in file:
station_id, year, month, d1, d2, d3 = parse_line(line)
data[(station_id, year, month)] = [
None if d == 'NaN' else float(d) for d in (d1, d2, d3)
]
编写parse_line
函数是留给读者的练习。
https://stackoverflow.com/questions/28683177
复制相似问题