python - 根据前几行在 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] 或其他东西?
解决方案
您正在寻找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()
推荐阅读
- android - 如何对不在我的 Activity 中的片段执行 setOnClickListener?
- php - FTP 和从数组中拉取项目想要摆脱一个空数组
- dart - 飞镖中有相当于 INT_MAX 的吗?
- ios - 如何使 Appclip 同时与企业分发和 AppStore 分发一起使用
- javascript - jquery隐藏手风琴标题/标题
- powerbi - DAX - 如何根据另一个表过滤表
- html - 移动设备上从 4 到 3 的卡片网格?
- canvasjs - 使用 CanvasJS 图表,如何在使用图表功能时在一页上有 2 个图表
- laravel - 不符合 psr-4 自动加载标准。更新作曲家后在 Laravel Composer 中跳过问题
- reactjs - 有没有办法保存 Firebase 数据以供以后在函数中使用?