Python 用于以各种方式处理pandas.DataFrame行的内置方法
我有一个数据帧,其值随时间变化。每行有当前值、最大可接受值、最小可接受值和标签。我希望为每一行的“值”找到下一行的第一行,该行的值满足由Max_Val和Min_Val列确定的条件(这意味着第一行满足:Min_ValPython 用于以各种方式处理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标签中 等等 也许有更好的方法来存
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的行,我不会将任何内容放入“下一个”列。