python - 在 Pandas 中,如果较小,如何将当前行项目设置为上一个?

标签 python pandas dataframe comparison

假设我有以下 pandas DataFrame:

table = [[datetime.datetime(2015, 1, 31), 1, 0.5],
         [datetime.datetime(2015, 2, 27), 1, 2],
         [datetime.datetime(2015, 3, 31), 1, 1.5],
         [datetime.datetime(2015, 4, 30), 1, 0], 
         [datetime.datetime(2015, 5, 31), 1, 2],
         [datetime.datetime(2015, 6, 30), 1, 1.2],
         [datetime.datetime(2015, 7, 31), 1, 3],
         [datetime.datetime(2015, 8, 31), 1, 0]]

df = pd.DataFrame(table, columns=['Date', 'Id', 'Value'])

        Date  Id  Value
0 2015-01-31   1    0.5
1 2015-02-27   1    2.0
2 2015-03-31   1    1.5
3 2015-04-30   1    0.0
4 2015-05-31   1    2.0
5 2015-06-30   1    1.2
6 2015-07-31   1    3.0
7 2015-08-31   1    0.0

我希望有一种简单的方法来遍历 df,如果 Value 的当前元素小于或等于,则将其设置为前一个元素,如果元素小于或等于,则添加一个 bool 值已经改成以前的了。但是,我不知道该怎么做。生成的 DataFrame 将是:

        Date  Id  Value  Altered
0 2015-01-31   1    0.5  False
1 2015-02-27   1    2.0  False 
2 2015-03-31   1    2.0  True
3 2015-04-30   1    2.0  True
4 2015-05-31   1    2.0  True
5 2015-06-30   1    2.0  True 
6 2015-07-31   1    3.0  False
7 2015-08-31   1    3.0  True

最佳答案

使用 .cummax() 获取最新的最大值。将它与 Value 列进行比较,看看它是否已被更改。

import pandas as pd
import datetime

table = [[datetime.datetime(2015, 1, 31), 1, 0.5],
     [datetime.datetime(2015, 2, 27), 1, 2],
     [datetime.datetime(2015, 3, 31), 1, 1.5],
     [datetime.datetime(2015, 4, 30), 1, 0], 
     [datetime.datetime(2015, 5, 31), 1, 2],
     [datetime.datetime(2015, 6, 30), 1, 1.2],
     [datetime.datetime(2015, 7, 31), 1, 3],
     [datetime.datetime(2015, 8, 31), 1, 0]]

df = pd.DataFrame(table, columns=['Date', 'Id', 'Value'])
df['New_Value'] = df.Value.cummax()
df['Altered'] = df['New_Value'] > df['Value']

print(df)


        Date  Id  Value  New_Value Altered
0 2015-01-31   1    0.5        0.5   False
1 2015-02-27   1    2.0        2.0   False
2 2015-03-31   1    1.5        2.0    True
3 2015-04-30   1    0.0        2.0    True
4 2015-05-31   1    2.0        2.0   False
5 2015-06-30   1    1.2        2.0    True
6 2015-07-31   1    3.0        3.0   False
7 2015-08-31   1    0.0        3.0    True

关于python - 在 Pandas 中,如果较小,如何将当前行项目设置为上一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31382033/

相关文章:

Python itertools 获取列表列表的排列和组合

python - 如何在 matplotlib 图中禁用 xkcd?

python - 在 Python 中按日期合并行和求和值

python - Pandas Dataframe 数据是相同的还是新的?

python - 如何从数据框中删除\n并将数据移动到新行

javascript - Pepper naoqi 2.5 onConsoleMessage null

python - 使用 apply() 自定义函数创建新列时出现 Pandas 内存错误

python - 读取多个 csv 文件并将文件名添加为 Pandas 中的新列

python - 复杂的 pandas isin 函数

python - 在 DataFrame 中为 NaN 添加值时出现问题