好像语句和循环非常缓慢且难以计算熊猫,我正在考虑如何重写我想要建立的条件。
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.new
是df.x
索引与df.y
索引之间的差异,我们试图证明该索引是否会低于df.x
df.new可能意味着索引是什么,如果索引是时间df.new意味着df.y
第一次低于df.x
。
答案 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