Python 基于一列中的多个条件创建新列

Python 基于一列中的多个条件创建新列,python,pandas,data-science,analysis,Python,Pandas,Data Science,Analysis,步骤1:我有一个数据帧,我想在其中查找C列中一个元素与另一个元素的差异(df.series.diff()) 第2步:如果与第1步的元素差异满足大于4的阈值,并且持续超过2个连续行,且减少的值不超过2,则我希望在新列中标记它 希望得到以下结果: A B(time) C(load) D(New column with logic) account 1 0 1 N account

步骤1:我有一个数据帧,我想在其中查找C列中一个元素与另一个元素的差异(df.series.diff())

第2步:如果与第1步的元素差异满足大于4的阈值,并且持续超过2个连续行,且减少的值不超过2,则我希望在新列中标记它

希望得到以下结果:

    A           B(time)    C(load)       D(New column with logic) 
  account 1     0            1           N        
  account 1     1:00         2.2         N   
  account 1     2:00         3.3         N
  account 1     3:00         9.6         N 
  account 1     4:00         10          Y
  account 1     5:00         12          Y 
  account 1     6:00         9           Y
  account 1     7:00         2.3         N
  account 1     8:00         6.5         N   
  account 1     9:00         7.0         Y
到目前为止,我已经尝试过这一点,但它不仅在测试前的第一部分起作用,而且:

    df['new']=df.load.diff(1).cumsum().ge(4) & df.load.diff(1).le(2)
尝试用更改

df['new']=df.load.diff(1).cumsum().ge(4) & df.load.diff(1).le(2)

使用

df = pd.DataFrame(data={"A": ['account 1', 'account 1','account 1','account 1','account 1','account 1', 'account 1', 'account 1', 'account 1', 'account 1'], 
                                "B(time)": [0, 1 ,2,3,4,5, 6, 7, 8, 9],
                                "C(load)": [1, 2.2, 3.3, 9.6, 10, 12, 9, 2.3, 6.5, 7.0]}) 
是:

如果你写:

df['new']=df['C(load)'].diff(1).cumsum().ge(4) & df['C(load)'].diff(1).le(2)
结果是:

     A        B (time) C(load)  new
0   account 1     0    1.0     False
1   account 1     1    2.2     False
2   account 1     2    3.3     False
3   account 1     3    9.6     False
4   account 1     4    10.0    True
5   account 1     5    12.0    True
6   account 1     6    9.0     True
7   account 1     7    2.3     False
8   account 1     8    6.5     False
9   account 1     9    7.0     True
     A        B (time) C(load)  new
0   account 1     0    1.0     False
1   account 1     1    2.2     False
2   account 1     2    3.3     False
3   account 1     3    9.6     False
4   account 1     4    10.0    True
5   account 1     5    12.0    True
6   account 1     6    9.0     True
7   account 1     7    2.3     False
8   account 1     8    6.5     False
9   account 1     9    7.0     True