获取datetimeindex之前的行以进行条件计算

时间:2018-01-10 19:48:53

标签: python pandas

我使用import Button from 'Button.vue' ... var Ctor = Vue.extend(Button); var instance = new Ctor({ propsData: {} }); // SET SLOT component.$slots.default = [ 'Hello' ]; instance.$mount('#el'); 有2个数据帧df1df2(值列表)。我想在2 datetimeindexes匹配时执行条件计算字段。当它们匹配时,我想访问前一行datetimeindexes。我想并执行以下计算。

df1

这里是df1['calc']=df1.where(df1.index==df2, df1['High']/df1['Close'].shift(1), df1.['Close']/df1['Close].shift(1))

df1

这是 Open High Low Close Volume Date_Time 2012-08-30 9:40:00 1273.25 1273.25 1273.25 1273.25 1 2012-08-30 9:50:00 1273.25 1273.25 1273.25 1273.25 1 2012-08-30 10:00:00 1273.25 1273.25 1273.25 1273.25 2 2012-08-30 10:10:00 1274.25 1274.50 1274.25 1274.50 3 2012-08-30 10:20:00 1274.00 1274.00 1274.00 1274.00 5 中的时间列表:

df2

我尝试使用2012-08-29 2012-08-29 15:40:00 2012-08-30 2012-08-30 10:00:00 2012-08-31 2012-08-31 10:50:00 2012-09-04 2012-09-04 15:50:00 2012-09-05 2012-09-05 10:50:00 2012-09-10 2012-09-10 12:30:00 2012-09-12 2012-09-12 09:50:00 2012-09-14 2012-09-14 15:20:00 2012-09-19 2012-09-19 10:30:00 .get_loc.loc。我尝试了屏蔽,但只访问屏蔽日期帧的前一行。感谢。

1 个答案:

答案 0 :(得分:0)

这是使用嵌套for循环的可怕的熊猫答案。这比写出如何比较数据帧之间的索引值要快得多。

driver.switchTo().frame(driver.findElement(By.tagName("iframe")));

输出:

<iframe class="x-component x-fit-item x-component-default" frameborder="0" src="/portal/page?libraryContext=7934fbba34c3d5bb965bcc33ff3a45acef04ff13d6e700ed7cc64a926f62db8e&amp;siteId=LT1&amp;menu=wm.config#wm.config.warehouse.warehouse////" name="1stPage:wm.config.warehouse.warehouse;Menu:wm.config;Ctx:7934fbba34c3d5bb965bcc33ff3a45acef04ff13d6e700ed7cc64a926f62db8e-1515619700794" data-lifecycle-participant="true" id="jdaIFrame-1026" style="margin: 0px; width: 1319px; height: 924px;"></iframe>

每次我使用带有pandas的for循环时,我想有一些更好的解决方案。

编辑:

for df1_row in df1.index.tolist():
    for df2_row in df2.index.tolist():
        if df1_row == df2_row:
            row = df1.index.get_loc(df1_row)
            print(df1.iloc[row]['High'] / df1.iloc[row - 1]['Close'])
            print(df1.iloc[row]['Close'] / df1.iloc[row - 1]['Close'])

输出:

1.00078600904
1.00078600904