如何执行此操作?
初始Df:
A B C D
0 0 1 0 0
1 1 1 1 1
2 0 0 1 1
3 0 1 0 1
4 1 1 0 0
5 1 1 1 0
最终Df:
A B C D Param1 Param2 Param3
0 0 1 0 0 0 0 0
1 1 1 1 1 3 1 0
2 0 0 1 1 0 2 2
3 0 1 0 1 1 1 1
4 1 1 0 0 1 1 1
5 1 1 1 0 1 2 0
基本上我想做的是比较两个连续行上的值,并将这些比较的计数存储在新列中。
计算细节:
对于第一行(索引为0):Param1,Param2,Param3等于0
答案 0 :(得分:4)
您只需将diff
推开,然后检查以下条件,即可:
d = df.diff()
df.assign(param1=d.eq(1).sum(1),
param2=(d.eq(0)&df.eq(1)).sum(1),
param3=d.eq(-1).sum(1))
A B C D param1 param2 param3
0 0 1 0 0 0 0 0
1 1 1 1 1 3 1 0
2 0 0 1 1 0 2 2
3 0 1 0 1 1 1 1
4 1 1 0 0 1 1 1
5 1 1 1 0 1 2 0
答案 1 :(得分:2)
IIUC:
shift = df.shift()
df['Param1'] = (df.eq(1) & shift.eq(0)).sum(1).astype(int)
df['Param2'] = (df.eq(1) & shift.eq(1)).sum(1).astype(int)
df['Param3'] = (df.eq(0) & shift.eq(1)).sum(1).astype(int)
输出:
A B C D Param1 Param2 Param3
0 0 1 0 0 0 0 0
1 1 1 1 1 3 1 0
2 0 0 1 1 0 2 2
3 0 1 0 1 1 1 1
4 1 1 0 0 1 1 1
5 1 1 1 0 1 2 0