好像语句和循环对于 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.new
是 df.x
的索引之间的差异索引为df.y
我们试图证明是否会低于 df.x
df.new 可以表示无论索引是什么,如果索引是时间 df.new 表示 df.y
中的第一次将低于 df.x
.
最佳答案
以下内容有效,但这实际上是一个循环,因为它使用 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
关于python - pandas:具有不同索引的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31164293/