如果有重复的 Ticker 并且超过一个月的时差,则从数据框中提取 Ticker 名称

Posted

技术标签:

【中文标题】如果有重复的 Ticker 并且超过一个月的时差,则从数据框中提取 Ticker 名称【英文标题】:Pulling out Ticker names from a dataframe, if there are duplicates of Ticker and over a month time difference 【发布时间】:2017-03-30 01:35:50 【问题描述】:

所以我有一个数据框df,其中包含一堆Ticker 名称和其他列。 该索引采用日期时间格式。

看起来像这样:

                    Ticker                          Owner  \
SEC Form 4                                                  
1900-10-14 17:15:00     AA                 SORRELL MARTIN   
1900-10-14 17:13:00     AA                     TATA RATAN   
1900-11-07 18:26:00     AA                   NELLES DUANE   
1900-11-10 16:53:00    AAT                  RADY ERNEST S   
1900-11-10 16:53:00    AAT                  RADY ERNEST S   
1900-11-15 17:12:00    ABR                  Tsunis George   
1900-11-15 17:12:00    ABR                  Tsunis George   
1900-11-14 10:02:00    ABT                  WHITE MILES D   
1900-11-14 10:04:00    ABT                  WHITE MILES D   
1900-11-14 10:03:00    ABT                  WHITE MILES D   
1900-11-14 10:02:00    ABT                  WHITE MILES D   
1900-11-14 10:03:00    ABT                  WHITE MILES D   
1900-11-03 14:20:00    AGC                           L.P.   
1900-11-07 14:51:00    AGC               SEIZERT GERALD L   
1900-11-07 14:51:00    AGC               SEIZERT GERALD L   
1900-10-07 17:27:00    AHC            MORONEY JAMES M III   
1900-05-03 18:05:00    AHC            MORONEY JAMES M III   
1900-11-03 18:05:00    AHC            MORONEY JAMES M III 

如果所述 Ticker 具有不同月份的索引日期(SEC Form 4),我想打印出 Tickers 及其随附的行值(这些行的 Owner 和 SEC 表单值)。所以在这种情况下,我想提取所有带有 AA 的行,以及带有 Ticker AHC 的所有行,因为它们都包含不同月份的索引日期。

所以输出应该是这样的:

                   Ticker                          Owner  \
SEC Form 4                                                  
1900-10-14 17:15:00     AA                 SORRELL MARTIN   
1900-10-14 17:13:00     AA                     TATA RATAN   
1900-11-07 18:26:00     AA                   NELLES DUANE   
1900-10-07 17:27:00    AHC            MORONEY JAMES M III   
1900-05-03 18:05:00    AHC            MORONEY JAMES M III   
1900-11-03 18:05:00    AHC            MORONEY JAMES M III

我在想最好的方法是使用 groupby,但我不确定如何从那里开始。

 Ticker_groups = df.groupby('Ticker')

我试图访问索引(保存日期),但我不太确定如何访问。

 df.groupby('Ticker').index  #doesn't work

我查看了 datetimeindex 文档并找到了

DatetimeIndex.month

这可能有用,但我不知道如何将它干净地应用于 groupby 的索引。

谢谢。

【问题讨论】:

【参考方案1】:

您可以将groupbyfilter 与一个lambda 函数一起使用,该函数将在当月执行pd.value_counts 并检查其中是否有多个条目。

df.groupby('Owner').filter(lambda x: pd.value_counts(x.index.month).shape[0] > 1)

                    Owner           SEC Form 4
Ticker                                        
1900-10-14 17:15:00    AA       SORRELL MARTIN
1900-10-14 17:13:00    AA           TATA RATAN
1900-11-07 18:26:00    AA         NELLES DUANE
1900-10-07 17:27:00   AHC  MORONEY JAMES M III
1900-05-03 18:05:00   AHC  MORONEY JAMES M III
1900-11-03 18:05:00   AHC  MORONEY JAMES M III

【讨论】:

嗨,它似乎工作得很好,但我在理解部分代码时遇到了一点麻烦。当我使用“pd.value_counts(x.index.month)”(“x”是 groupby 对象)时,我自己得到一个错误。但是,如果我编写您编写的完整代码,我不会遇到任何问题。所以我假设这就是你使用过滤器的原因?谢谢。 @moondra,groupby 对象中没有任何数据。它只存储有关在哪里对数据框进行分区的信息。这就是为什么你会在那里出错。 groupby 具有做事的特殊功能,filter 就是其中之一。鼓励您阅读groupby documentation

以上是关于如果有重复的 Ticker 并且超过一个月的时差,则从数据框中提取 Ticker 名称的主要内容,如果未能解决你的问题,请参考以下文章

美国和中国的时差是多少?

Python:将字符串转换为日期时间,计算时差,选择时差超过3天的行

使用Python计算时差[重复]

中国与美国的时差怎么算?

计算时差超过 24 小时

Hbase对时,时差范围的确定