Pandas:不同指数的情况

2024-04-25 23:40:07 发布

您现在位置:Python中文网/ 问答频道 /正文

好像语句和循环非常慢,而且很难计算,我正在尝试思考如何重写我想要建立的条件。你知道吗

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.x

你知道吗df.新可能意味着无论指数是什么,如果指数是时间df.新表示df.y将低于df.x的第一次。你知道吗


Tags: 证明falsedataframepandasdfnewif时间
1条回答
网友
1楼 · 发布于 2024-04-25 23:40:07

下面的方法是可行的,但这实际上是一个循环,因为它使用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

相关问题 更多 >