import numpy as np
import pandas as pd
test = {'temperature' : [15, 26, 24, 23, 26, 29, 25, 24, 19, 16, 15]}
df = pd.DataFrame(data=test)
print(df)
record = []
for i in df:
if df['temperature'][df.loc[df['temperature'].lt(df['temperature'])] -1] > df['temperature'][df.loc[df['temperature'].le(df['temperature'])]]:
record.append(df['temperature'])
else:
record.append(np.nan)
df['record'] = record
print(df)
我正在做一个噩梦,根据以下逻辑创建一个新专栏
查找“最高索引小于温度的值”,仅当“最高索引小于温度的值的上一个索引中的值大于”时,才在新列中打印此值
请注意:-仅使用行索引中小于当前“温度”索引的值
步骤1:
对于每个值,我希望找到最高索引小于温度的值,例如,最近小于25
的值的索引是3
(值23
)
步骤2:
然后我想检查之前索引中的值是否大于或小于找到的值。下面是步骤1中的示例。在3
之前的索引中的值为24
,大于23
步骤3:
创建满足步骤的新列打印值和不满足步骤的np.nan
我无法理解这件事
输出如下所示:
temperature record
0 15 NaN
1 26 NaN
2 24 NaN
3 23 NaN
4 26 23
5 29 23
6 25 23
7 24 23
8 19 NaN
9 16 NaN
10 15 NaN
熊猫经常使用优雅的一行程序解决问题。不过,我不确定情况是否如此,所以让我们用手写循环的枯燥方式:
示例中的用法:
请注意,此实现是二次的,对于长度值不断减小且显著超过10K左右的列,可能变得不切实际。找到问题的线性时间解决方案是一个很好的难题(不过,我怀疑这与您的用例不太相关)
我试图严格遵守你的原始代码。然而,我认为这个记录意味着一个新的温度记录。但是,您的说明似乎只关心当前温度是否高于以前的温度。如果需要记录临时值,则需要知道新临时值大于所有以前的临时值。这就是我在下面代码中使用的假设
相关问题 更多 >
编程相关推荐