首页 > 解决方案 > 如何根据前一行的值标记数据?

问题描述

如果当前值高于前一行,我想将数据标记为“1”,否则标记为“0”。

假设我有这个 DataFrame:

df = pd.DataFrame({'date': [1,2,3,4,5], 'price': [50.125, 45.25, 65.857, 100.956, 77.4152]})

我希望输出好像 DataFrame 是这样构造的:

df = pd.DataFrame({'date': [1,2,3,4,5], 'price': [50.125, 45.25, 65.857, 100.956, 77.4152], 'label':[0, 0, 1, 1, 0]})

*我不知道如何发布 DataFrame

这些代码是我的尝试:

df['label'] = 0
i = 0
for price in df['price']:
    i = i+1
    if price in i > price: #---> right now I am stuck here. i=It says argument of type 'int' is not iterable
        df.append['label', 1]
    elif price in i <= price:
        df.append['label', 0]

我认为我的代码中还有其他逻辑错误。我究竟做错了什么?

标签: pythonpandas

解决方案


Series.ge通过( >=)创建布尔掩码,Series.shift并转换为整数以True/False进行1/0映射Series.view

df['label'] = df['price'].ge(df['price'].shift()).view('i1')

或通过Series.astype

df['label'] = df['price'].ge(df['price'].shift()).astype(int)

推荐阅读