我有两个数据帧.例子:
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但无法弄清楚如何实际看到不同的行.
任何指针都会受到欢迎
我有一个包含许多列的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行.我意识到我需要重置索引才能做到这一点,这很好.
我尝试过的所有东西最终都会进入左侧区域(获取值并在熊猫之外创建一个列表等)
任何建议赞赏.
我有一个数据框,里面填充了交易策略中的交易.需要更新交易策略中的逻辑,以确保如果策略已经在交易中,则不会进行交易 - 但这是一个不同的问题.许多先前交易的交易数据从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)
关于如何更有效地实现这一目标的任何想法或想法?
如果您想尝试重现我的实际数据帧,可以单击此处查看我的数据样本.
我有一个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) 这似乎是一个简单的问题(和答案),但是我遇到了麻烦。
问题:
我有一个充满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,并将窗口设置为“ …