小编Eri*_*own的帖子

比较两个数据帧并获得差异

我有两个数据帧.例子:

df1:
Date       Fruit  Num  Color 
2013-11-24 Banana 22.1 Yellow
2013-11-24 Orange  8.6 Orange
2013-11-24 Apple   7.6 Green
2013-11-24 Celery 10.2 Green

df2:
Date       Fruit  Num  Color 
2013-11-24 Banana 22.1 Yellow
2013-11-24 Orange  8.6 Orange
2013-11-24 Apple   7.6 Green
2013-11-24 Celery 10.2 Green
2013-11-25 Apple  22.1 Red
2013-11-25 Orange  8.6 Orange
Run Code Online (Sandbox Code Playgroud)

每个数据帧都以Date作为索引.两个数据帧都具有相同的结构.

我想要做的是比较这两个数据帧,并找出df2中哪些行不在df1中.我想比较日期(索引)和第一列(Banana,APple等),看看它们是否存在于df2和df1中.

我尝试过以下方法:

对于第一种方法,我得到了这个错误:"异常:只能比较标记相同的DataFrame对象".我已经尝试删除日期作为索引,但得到相同的错误.

第三种方法中,我得到断言返回False但无法弄清楚如何实际看到不同的行.

任何指针都会受到欢迎

python dataframe pandas

63
推荐指数
7
解决办法
12万
查看次数

拆分Pandas DataFrame中的List

我有一个包含许多列的csv文件.使用pandas,我将这个csv文件读入一个数据帧,并有一个日期时间索引和五到六个其他列.

其中一列是时间戳列表(下面带索引的示例)

CreateDate     TimeStamps
4/1/11         [Timestamp('2012-02-29 00:00:00'), Timestamp('2012-03-31 00:00:00'), Timestamp('2012-04-25 00:00:00'), Timestamp('2012-06-30 00:00:00')]
4/2/11         [Timestamp('2014-01-31 00:00:00')]
6/8/11         [Timestamp('2012-08-31 00:00:00'), Timestamp('2012-09-30 00:00:00'), Timestamp('2012-11-07 00:00:00'), Timestamp('2013-01-10 00:00:00'), Timestamp('2013-07-25 00:00:00')]
Run Code Online (Sandbox Code Playgroud)

我想要做的是将时间戳列转换为列出的每个时间戳的单独行.例如,对于第1行,它将转换为4行,第2行将转换为1行.我意识到我需要重置索引才能做到这一点,这很好.

我尝试过的所有东西最终都会进入左侧区域(获取值并在熊猫之外创建一个列表等)

任何建议赞赏.

python csv pandas

10
推荐指数
3
解决办法
1万
查看次数

比较Pandas Dataframe Rows和Dropped具有重叠日期的行

我有一个数据框,里面填充了交易策略中的交易.需要更新交易策略中的逻辑,以确保如果策略已经在交易中,则不会进行交易 - 但这是一个不同的问题.许多先前交易的交易数据从csv文件读入数据帧.

这是我的数据问题:我需要对数据帧进行逐行比较,以确定rowX的Entrydate是否小于ExitDate rowX-1.

我的数据样本:

Row 1:
EntryDate  ExitDate
2012-07-25 2012-07-27 

Row 2:
EntryDate  ExitDate
2012-07-26 2012-07-29
Run Code Online (Sandbox Code Playgroud)

需要删除第2行,因为它是不应该发生的交易.

我无法确定哪些行是重复的,然后丢弃它们.我在这个问题的答案3中尝试了这个方法但运气不错,但这并不理想,因为我必须手动迭代数据帧并读取每一行的数据.我目前的方法是在下面,并且可能是丑陋的.我检查日期,然后将它们添加到新的数据帧.此外,这种方法在最终的数据帧中给了我多个重复.

for i in range(0,len(df)+1):
    if i+1 == len(df): break #to keep from going past last row
    ExitDate = df['ExitDate'].irow(i)
    EntryNextTrade = df['EntryDate'].irow(i+1)

    if EntryNextTrade>ExitDate: 
        line={'EntryDate':EntryDate,'ExitDate':ExitDate}
        df_trades=df_trades.append(line,ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

关于如何更有效地实现这一目标的任何想法或想法?

如果您想尝试重现我的实际数据帧,可以单击此处查看我的数据样本.

python pandas

7
推荐指数
1
解决办法
3124
查看次数

从pandas数据框中删除"重叠"日期

我有一个pandas数据框,如下所示:

ID  date       close
1   09/15/07   123.45
2   06/01/08   130.13
3   10/25/08   132.01
4   05/13/09   118.34
5   11/07/09   145.99
6   11/15/09   146.73
7   07/03/11   171.10
Run Code Online (Sandbox Code Playgroud)

我想删除任何重叠的行.

重叠行定义为另一行X天内的任何行.例如,如果X = 365,则结果应为:

ID  date       close
1   09/15/07   123.45
3   10/25/08   132.01
5   11/07/09   145.99
7   07/03/11   171.10
Run Code Online (Sandbox Code Playgroud)

如果X = 50,结果应为:

ID  date       close
1   09/15/07   123.45
2   06/01/08   130.13
3   10/25/08   132.01
4   05/13/09   118.34
5   11/07/09   145.99
7   07/03/11   171.10
Run Code Online (Sandbox Code Playgroud)

我在这里看了几个问题,但没有找到正确的方法.例如,Pandas检查多行中的重叠日期,最快的方法来消除熊猫数据帧中的特定日期是相似的,但不能完全得到我需要的东西.

我今天有以下丑陋的代码适用于小X值但是当X变大时(例如,当X = 365时),它会删除除原始日期之外的所有日期.

filter_dates = …
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
1
解决办法
660
查看次数

在熊猫的每日股市数据上找到连续52周新高

这似乎是一个简单的问题(和答案),但是我遇到了麻烦。

问题:

我有一个充满OHLC数据的熊猫数据框。我想在整个数据框中找到52周以来的最高滚动。

我的数据集来自雅虎。您可以使用以下代码提取相同的数据以获取每日数据:

import pandas.io.data as web
df = web.DataReader('SPX', 'yahoo', start, end)
Run Code Online (Sandbox Code Playgroud)

数据的尾部给出以下输出:

                 Open        High         Low       Close     Volume  
Date                                                                    
2016-07-15  216.779999  217.009995  215.309998  215.830002  107155400   
2016-07-18  215.970001  216.600006  215.669998  216.410004   58725900   
2016-07-19  215.919998  216.229996  215.630005  216.190002   54345700   
2016-07-20  216.190002  217.369995  216.190002  217.089996   58159500   
2016-07-21  216.960007  217.220001  215.750000  216.270004   66070000 
Run Code Online (Sandbox Code Playgroud)

为了达到52周的最高水平(滚动),我可以运行以下命令:

df["52weekhigh"] = pd.rolling_max(df.High, window=200, min_periods=1)
Run Code Online (Sandbox Code Playgroud)

我得到以下内容(一些上校:

                 High  52weekhigh
Date                              
2016-07-15  217.009995  217.009995
2016-07-18  216.600006  217.009995
2016-07-19  216.229996  217.009995
2016-07-20  217.369995  217.369995
2016-07-21  217.220001  217.369995
Run Code Online (Sandbox Code Playgroud)

随着新高的到来,这给了我52周高点的价值,但是我不喜欢在这里使用200。是200还是201或220(一年中大约有200个交易日)?

我可以每周对数据进行重新采样以获取值,但后来我无法轻松地恢复到原始的每日数据(或者可以吗?)。

所以...这是一个问题:

有没有办法在pandas数据帧上运行rolling_max,并将窗口设置为“ …

python pandas

2
推荐指数
1
解决办法
1868
查看次数

标签 统计

pandas ×5

python ×5

csv ×1

dataframe ×1