如何解决是否有任何快速方法可以在python中为时间序列数据执行以下操作?
我有一个如下所示的时间序列数据集
id date sales
0 2016-01-01 11.0
1 2016-01-02 12.0
2 2016-01-03 3.0
3 2016-01-08 3.1
4 2016-01-09 11.0
5 2016-01-10 34.2
6 2016-01-15 34.2
7 2016-01-16 34.2
8 2016-01-18 11.0
问题:
-
有什么方法可以找到日期列的频率(假设它不是连续的)。我宁愿根据出现频率最高的频率来查找频率。 (即这里是“每日”)。请注意,
.inferred_freq
会给我None
作为频率。 -
假设我有另一个数据集,其中包含第一个数据集中的缺失日期,如下所示:
id date
0 2016-01-04
1 2016-01-05
2 2016-01-06
3 2016-01-07
4 2016-01-11
5 2016-01-12
6 2016-01-13
7 2016-01-14
在这里,我需要根据以下条件对第一个数据集中的日期进行分组:如果第二个数据框中的下一个缺失日期可用最快的方式。因此,我的第一个数据集应如下所示:
id date sales Group_id
0 2016-01-01 11.0 1
1 2016-01-02 12.0 1
2 2016-01-03 3.0 1
3 2016-01-08 3.1 2
4 2016-01-09 11.0 2
5 2016-01-10 34.2 2
6 2016-01-15 34.2 3
7 2016-01-16 34.2 3
8 2016-01-18 11.0 3
- 是否有任何 FAST 方法(请记住数据框可能包含数百万行),以根据列值(例如,销售额)删除不重复的行。在此,根据列 sales 我要要删除的非重复行将是:
1 2016-01-02 12.0
2 2016-01-03 3.0
3 2016-01-08 3.1
因为“销售”列在这三行中具有唯一的值。
解决方法
IIUC,Q1和Q2相同:使用diff
检查时间差是否为1天,然后使用cumsum
:
df["date"] = pd.to_datetime(df["date"])
df["group"] = (df["date"].diff()>pd.Timedelta(days=1)).cumsum()+1
print (df)
id date sales group
0 0 2016-01-01 11.0 1
1 1 2016-01-02 12.0 1
2 2 2016-01-03 3.0 1
3 3 2016-01-08 3.1 2
4 4 2016-01-09 14.0 2
5 5 2016-01-10 34.2 2
6 6 2016-01-15 34.2 3
7 7 2016-01-16 34.2 3
8 8 2016-01-17 14.0 3
9 9 2016-01-18 11.0 3
将drop_duplicates
与keep=False
一起使用来获得唯一的销售价值:
print (df.drop_duplicates("sales",keep=False))
id date sales group
1 1 2016-01-02 12.0 1
2 2 2016-01-03 3.0 1
3 3 2016-01-08 3.1 2
或duplicated
获得的结果没有唯一性:
print (df[df.duplicated("sales",keep=False)])
id date sales group
0 0 2016-01-01 11.0 1
4 4 2016-01-09 14.0 2
5 5 2016-01-10 34.2 2
6 6 2016-01-15 34.2 3
7 7 2016-01-16 34.2 3
8 8 2016-01-17 14.0 3
9 9 2016-01-18 11.0 3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。