python - 使用 pandas 获取列的当前最大值并输入到新列中

标签 python pandas dataframe max cumulative-sum

我正在尝试获取 pandas 中列的当前最大值。例如,我想获取列 [ask] 并创建一个新列 [high_of_day] 来显示 Ask 列的最大值到此为止,并继续重复[high_of_day]列中的最大值,直到询问列中出现更大的新值。

数据输入

data = [['9:00',1,0],['10:00',2,0],['11:00',3,0],['12:00',4,0],['13:00',2,0],['14:00',5,0]]
df3 = pd.DataFrame(data, columns=['DateTime','Ask','High_of_Day'],dtype=float)

输出

  DateTime  Ask  High_of_Day
0     9:00  1.0          0.0
1    10:00  2.0          0.0
2    11:00  3.0          0.0
3    12:00  4.0          0.0
4    13:00  2.0          0.0
5    14:00  5.0          0.0  

我尝试过使用各种循环,但似乎无法做到正确。

我想要得到的期望结果是:

  DateTime  Ask  High_of_Day
0     9:00  1.0          1.0
1    10:00  2.0          2.0
2    11:00  3.0          3.0
3    12:00  4.0          4.0
4    13:00  2.0          4.0
5    14:00  5.0          5.0

任何有关获得正确算法的帮助将不胜感激,谢谢!

最佳答案

选项 1
pd.Series.cummax

s = df3.Ask.cummax()
print(s)
0    1.0
1    2.0
2    3.0
3    4.0
4    4.0
5    5.0
Name: Ask, dtype: float64

df3['High_of_Day'] = s
print(df3)
  DateTime  Ask  High_of_Day
0     9:00  1.0          1.0
1    10:00  2.0          2.0
2    11:00  3.0          3.0
3    12:00  4.0          4.0
4    13:00  2.0          4.0
5    14:00  5.0          5.0
<小时/>

选项 2
np.maximum.accumulate

df3['High_of_Day'] = np.maximum.accumulate(df3.Ask)
print(df3)
  DateTime  Ask  High_of_Day
0     9:00  1.0          1.0
1    10:00  2.0          2.0
2    11:00  3.0          3.0
3    12:00  4.0          4.0
4    13:00  2.0          4.0
5    14:00  5.0          5.0

关于python - 使用 pandas 获取列的当前最大值并输入到新列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46679353/

相关文章:

python - 使用 Python 进行数据操作

python - 不锐化/平滑图像中人物 body 的边界

python - Pygame:画线

python - 更改从 *.csv 文件读取的数据

python - 如何从可能的字符串列表中替换 python 中的字符串

python - 有条件地过滤一个 df 中的行以获取另一个 df 的子集共有的特定列

python - 如何更改 pandas 数据框中的文本片段

pandas - python Pandas : How to take categorical average of a column?

python - 按组中每个出现的值构建计数列

python - 在 Pandas DataFrame 中按组删除异常值的更快方法