Python 用于以各种方式处理pandas.DataFrame行的内置方法

Python 用于以各种方式处理pandas.DataFrame行的内置方法,python,pandas,Python,Pandas,我有一个数据帧,其值随时间变化。每行有当前值、最大可接受值、最小可接受值和标签。我希望为每一行的“值”找到下一行的第一行,该行的值满足由Max_Val和Min_Val列确定的条件(这意味着第一行满足:Min_Val1.2。0索引行后的第一行的值为2.3。我们把它的标签定为“星期二”,放在下一个标签栏里 1-2.6>值>3.3不存在我们什么都不放 2-我们正在寻找具有:13.1>值>7.8的行。第一行(索引为3)的值满足此条件,我们将其标签“星期四”放入下一个\u标签中 等等 也许有更好的方法来存

我有一个数据帧,其值随时间变化。每行有当前值、最大可接受值、最小可接受值和标签。我希望为每一行的“值”找到下一行的第一行,该行的值满足由Max_Val和Min_Val列确定的条件(这意味着第一行满足:Min_Val
import pandas as pd

max_next_values = [4.5, 2.6, 13.1, 9.6, 13.1]
min_next_values = [1.2, 3.3, 7.8, 4.4, 15.2]
values = [1.2, 2.3, 4.4, 8.9, 16.2]
labels = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday']

df = pd.DataFrame({'Label': labels, 'Value': values, 'Max_Next_Val': max_next_values, 'Min_Next_Val': min_next_values})
数据帧的示例内容:

       Label  Max_Next_Val  Min_Next_Val  Value
0     monday           4.5           1.2    1.2
1    tuesday           2.6           3.3    2.3
2  wednesday          13.1           7.8    4.4
3   thursday           9.6           4.4    8.9
4     friday          13.1          15.2   16.2
期望输出:

       Label  Max_Next_Val  Min_Next_Val  Value  Next_Label
0     monday           4.5           1.2    1.2  tuesday
1    tuesday           2.6           3.3    2.3  
2  wednesday          13.1           7.8    4.4  thursday
3   thursday           9.6           4.4    8.9
4     friday          13.1          15.2   16.2  NaN
说明:

0-我们正在查找以下行:4.5>值>1.2。0索引行后的第一行的值为2.3。我们把它的标签定为“星期二”,放在下一个标签栏里

1-2.6>值>3.3不存在我们什么都不放

2-我们正在寻找具有:13.1>值>7.8的行。第一行(索引为3)的值满足此条件,我们将其标签“星期四”放入下一个\u标签中

等等


也许有更好的方法来存储最小值和最大值,从而简化计算?

一种方法是:

d = df.apply(lambda x: ((x.Value > df.Min_Val) & (x.Value < df.Max_Val)), axis=1)

df['next'] = d[d].idxmax().map(df['Label'])

print(df)

一种方法是:

d = df.apply(lambda x: ((x.Value > df.Min_Val) & (x.Value < df.Max_Val)), axis=1)

df['next'] = d[d].idxmax().map(df['Label'])

print(df)

此数据帧的预期输出是什么?抱歉,我误解了您的问题,并假设检查是针对每一行单独进行的。你能把你的问题添加到你想要的输出中吗?同样,你所描述的可以通过广播来完成,但它可以快速增长。数据帧的长度是多少?数据帧将包含数千行。最小/最大值列中有一些错误。此数据帧的预期输出是什么?抱歉,我误解了您的问题,并假设检查分别针对每一行。你能把你的问题添加到你想要的输出中吗?同样,你所描述的可以通过广播来完成,但它可以快速增长。您的数据帧的长度是多少?数据帧将包含数千行您的最小/最大值列中有一些错误我认为您的答案是我正在寻找的:)但是对于每一行,我只希望从第一行找到满足条件且索引大于此行索引的标签。对于索引为3的行,只有一个可能的行:索引为4的行,但此行的值不满足最小-最大条件,因此对于索引为3的行,我不会在“下一行”列中输入任何内容。我认为您的答案是我正在寻找的:),但对于每一行,我只希望从满足条件的第一行中找到标签索引大于此行的索引。对于索引为3的行,只有一个可能的行:索引为4的行,但此行的值不满足最小-最大条件,因此对于索引为3的行,我不会将任何内容放入“下一个”列。