繁体   English   中英

仅保留给定日期列中第一次出现的数据,而不删除 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-0109:56 ,对于2008-01-0209:57 换句话说,我希望我的数据本身在 1 分钟的时间间隔内,同时仅在Long signal中第一次出现值1时保留数据。

要仅保留第一次出现的Long Signal并用 0 填充剩余的信号,您可以使用locgroupbydt.dayidxmax()的组合。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM