熊猫:不同指数的条件

时间:2015-07-01 14:32:29

标签: python pandas

好像语句和循环非常缓慢且难以计算熊猫,我正在考虑如何重写我想要建立的条件。

df = pandas.DataFrame()
df['x'] = [1.2, 1.5, 1.7, 1.9]
df['y'] = [1.7, 1.8, 0.7, 1.4]
print(df)

     x    y
0  1.2  1.7
1  1.5  1.8
2  1.7  0.7
3  1.9  7.0

我想要做的是创建一个条件,验证df.y是否会小于df.x,如果是,则创建一个新列,减去两个索引。

例如,

df.y[0] < df.x[0]如果没有,

然后检查if df.y[0] < df.x[1]是否为真df.new[0] = 1 - 0;

转到下一个值:df.y[1] < df.x[1]

如果没有,请检查if df.y[1] < df.x[2]是否为真df.new[1] = 2 - 1

如果df.y[i]的值始终大于任何df.x[n]值,则将False追加到df.new[i]

这种情况下的输出应该是这样的

     x    y    new
0  1.2  1.7      3
1  1.5  1.8      2
2  1.7  0.7      0
3  1.9  7.0  False

其中df.newdf.x索引与df.y索引之间的差异,我们试图证明该索引是否会低于df.x

df.new可能意味着索引是什么,如果索引是时间df.new意味着df.y第一次低于df.x

1 个答案:

答案 0 :(得分:1)

以下有效,但这确实是一个循环,因为它使用apply

In [225]:
def func(x):
    if (x['y'] > df['x']).all():
        return False
    else:
        return (x['y'] > df['x']).idxmin()
df['new'] = df.apply(lambda row: func(row), axis=1)
df

Out[225]:
     x    y    new
0  1.2  1.7      2
1  1.5  1.8      3
2  1.7  0.7      0
3  1.9  7.0  False