[英]Keeping only the Last occurrences of a data in column on a given date in pandas
[英]Keeping only the first occurrences of a data in column on a given date without removing other occurrences in pandas
我对 pandas 很陌生,所以请耐心等待。 我有几年的 1 分钟间隔明智数据时间框架。 每行都有一个Long signal
列。 我的数据框索引是日期时间列。
为简单起见,我们只取两天的数据。
Long Signal
Date
2008-01-01 09:55 0
2008-01-01 09:56 1
2008-01-01 09:57 0
...............
2008-01-01 03:28 0
2008-01-01 03:29 1
2008-01-01 03:30 1
2008-01-02 09:55 0
2008-01-02 09:56 0
2008-01-02 09:57 1
...............
2008-01-02 03:28 0
2008-01-02 03:29 1
2008-01-02 03:30 1
我正在尝试将其转换为数据框,如下所示,
Long Signal
Date
2008-01-01 09:55 0
2008-01-01 09:56 1
2008-01-01 09:57 0
...............
2008-01-01 03:28 0
2008-01-01 03:29 0
2008-01-01 03:30 0
2008-01-02 09:55 0
2008-01-02 09:56 0
2008-01-02 09:57 1
...............
2008-01-02 03:28 0
2008-01-02 03:29 0
2008-01-02 03:30 0
那就是我只想保留第一次出现的Long signal
,并为同一天的剩余事件填充 0。 也就是说,在任何一天, Long signal
最多只能出现一次值 1。尝试了drop_duplicate
但没有运气。 我将不胜感激任何帮助。
编辑1:
我想保留第一个Long signal
为 1 的时间信息。在我的情况下2008-01-01
是09:56
,对于2008-01-02
是09:57
。 换句话说,我希望我的数据本身在 1 分钟的时间间隔内,同时仅在Long signal
中第一次出现值1
时保留数据。
要仅保留第一次出现的Long Signal
并用 0 填充剩余的信号,您可以使用loc
、 groupby
与dt.day
和idxmax()
的组合。
idxmax()
function 用于获取最大值的行 label 并且如果多个值等于最大值(即在您的情况下为 1),则第一行 ZD304BA20E96D87411588EEBAC 非常适合您的需求,所以它返回了该值。
为了显示:
df['Long Signal'] = df['Long Signal'].loc[df.groupby([df.Date.dt.day])['Long Signal'].idxmax()]
df['Long Signal'].fillna(0,inplace=True)
会回来:
Out[134]:
Date Long Signal
0 2008-01-01 09:55:00 0.0
1 2008-01-01 09:56:00 1.0
2 2008-01-01 09:57:00 0.0
3 2008-01-01 03:28:00 0.0
4 2008-01-01 03:29:00 0.0
5 2008-01-01 03:30:00 0.0
6 2008-01-02 09:55:00 0.0
7 2008-01-02 09:56:00 0.0
8 2008-01-02 09:57:00 1.0
9 2008-01-02 03:28:00 0.0
10 2008-01-02 03:29:00 0.0
11 2008-01-02 03:30:00 0.0
要保留第一个 Long 信号为 1 的时间信息,您可以简单地使用:
df.loc[df['Long Signal']==1]['Date']
1 2008-01-01 09:56:00
8 2008-01-02 09:57:00
但我不能 100% 确定这是您第二部分所需要的,因为它没有在您想要的 output 中演示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.