让我们假设我要定期进行温度测量并将这些值记录在Pandas Dataframe中
day temperature [F]
0 89
1 91
2 93
3 88
4 90
现在,我想创建另一列,当且仅当前两个值都在某个特定级别之上时,该列才设置为1。在我的场景中,如果两个连续的值都大于90,我想创建一个列值1,从而产生
day temperature Above limit?
0 89 0
1 91 0
2 93 1
3 88 0
4 91 0
5 91 1
6 93 1
尽管有一些SO和Google的挖掘方法,但尚不清楚我是否可以在for循环中使用iloc [x],loc [x]或其他工具?
答案 0 :(得分:2)
尝试一下:
arr
将来,请包括要测试的代码(在本例中为df施工线)
答案 1 :(得分:2)
df['limit']=""
df.iloc[0,2]=0
for i in range (1,len(df)):
if df.iloc[i,1]>90 and df.iloc[i-1,1]>90:
df.iloc[i,2]=1
else:
df.iloc[i,2]=0
此处iloc [i,2]引用第i个行索引和第2列索引(限制列)。希望这会有所帮助
答案 2 :(得分:2)
您正在寻找熊猫中的docs函数。
function select<T extends keyof typeof names>(arg: T): T==="edwards" ? Friend : Enemy {
return names[arg];
}
答案 3 :(得分:0)
使用shift()的解决方案:
>> threshold = 90
>> df['Above limit?'] = 0
>> df.loc[((df['temperature [F]'] > threshold) & (df['temperature [F]'].shift(1) > threshold)), 'Above limit?'] = 1
>> df
day temperature [F] Above limit?
0 0 89 0
1 1 91 0
2 2 93 1
3 3 88 0
4 4 90 0
答案 4 :(得分:0)
尝试使用rolling(window = 2),然后按以下方式应用apply():
df["limit"]=df['temperature'].rolling(2).apply(lambda x: int(x[0]>90)&int(x[-1]> 90))