gpt4 book ai didi

python - Pandas 数据框 : how to find missing years in a timeseries?

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:02 24 4
gpt4 key购买 nike

我有一个带有时间戳索引和大约 100,000 行的 DataFrame。通过

df['year'] = df.index.year

创建一个包含每一行年份的新列很容易。现在我想找出我的时间序列中缺少哪些年份。到目前为止,我明白我可以使用 groupby 来获得“东西”,让我找到独特的值(value)。因此,

grouped = df.groupby('year')
grouped.groups.keys()

会给我数据集中存在的年份。我现在可以用

构建一个完整的年份向量
pd.date_range(df.index.min(), df.index.max(), freq='AS')

然后通过重建索引,我应该能够找到缺失的年份,因为这些年份具有 NaN 值。

然而,对于这样一个看似简单的任务来说,这听起来非常复杂,而 grouped.groups 操作实际上需要相当长的时间;大概是因为它不仅查找唯一键,而且还构建属于每个键的行的索引列表,这是我在这里不需要的功能。

有什么方法可以更直接/高效地获取dataframe列的唯一元素吗?

最佳答案

一种方法是构建一系列感兴趣的年份,然后使用 isin 查看缺失值:

In [89]:

year_s = pd.Series(np.arange(1993, 2015))
year_s
Out[89]:
0 1993
1 1994
2 1995
3 1996
4 1997
5 1998
6 1999
7 2000
8 2001
9 2002
10 2003
11 2004
12 2005
13 2006
14 2007
15 2008
16 2009
17 2010
18 2011
19 2012
20 2013
21 2014
dtype: int32

In [88]:

df = pd.DataFrame({'year':[1999, 2000, 2013]})
df
Out[88]:
year
0 1999
1 2000
2 2013

In [91]:

year_s[~year_s.isin(df['year'])]
Out[91]:
0 1993
1 1994
2 1995
3 1996
4 1997
5 1998
8 2001
9 2002
10 2003
11 2004
12 2005
13 2006
14 2007
15 2008
16 2009
17 2010
18 2011
19 2012
21 2014
dtype: int32

因此,在您的情况下,您可以生成上述年份系列,然后对于您的 df,您可以使用以下方法获取年份:

df.index.year.unique()

这比执行 groupby 快得多。

注意传递给 arange 的最后一个值不包含在范围内

关于python - Pandas 数据框 : how to find missing years in a timeseries?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30322693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com