根据之前的行在Pandas中生成列值

时间:2019-03-21 17:04:46

标签: python pandas jupyter

让我们假设我要定期进行温​​度测量并将这些值记录在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]或其他工具?

5 个答案:

答案 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))