第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
到目前为止,我已经尝试过此方法,但是它不能仅在and之前的第一部分起作用:
df['new']=df.load.diff(1).cumsum().ge(4) & df.load.diff(1).le(2)
答案 0 :(得分:0)
尝试使用 & 更改 和 。
df['new']=df.load.diff(1).cumsum().ge(4) & df.load.diff(1).le(2)
答案 1 :(得分:0)
使用构建的示例数据库
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]})
是:
A B(time) C(load)
0 account 1 0 1.0
1 account 1 1 2.2
2 account 1 2 3.3
3 account 1 3 9.6
4 account 1 4 10.0
5 account 1 5 12.0
6 account 1 6 9.0
7 account 1 7 2.3
8 account 1 8 6.5
9 account 1 9 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