首页 > 解决方案 > 根据前几行在 Pandas 中生成列值

问题描述

让我们假设我定期进行温​​度测量并将值记录在 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 和谷歌挖掘,但不清楚我是否可以在 for 循环中使用 iloc[x]、loc[x] 或其他东西?

标签: pythonpandasjupyter

解决方案


您正在寻找shift熊猫中的功能。


import io
import pandas as pd

data = """
day   temperature        Expected
0       89               0
1       91               0
2       93               1
3       88               0
4       91               0
5       91               1
6       93               1
"""

data = io.StringIO(data)
df = pd.read_csv(data, sep='\s+')

df['Result'] = ((df['temperature'].shift(1) > 90) & (df['temperature'] > 90)).astype(int)

# Validation
(df['Result'] == df['Expected']).all()


推荐阅读