假设我有一个以下性质的数据框架。 请注意索引不是连续的。
A B
a 6.5 1
b 6.8 0
c 7 0
f 6 1
h 6.1 0
i 6.2 0
我想创建一个新的列C,以便
如果B为1,则C = A
否则C = A(b) - A(a)......这里A(a)应该是B = 1作为其最近一行的那个。
EG。在行c的情况下,C列的值应为7-6.5 你能协助制定这种逻辑吗?
答案 0 :(得分:1)
我认为您需要where
ffill
- 转发NaN
s:
m = df['B'] == 1
df['C'] = np.where(m, df['A'], df['A'] - df['A'].where(m).ffill())
或者:
df['C'] = df['A'].where(m, df['A'] - df['A'].where(m).ffill())
print (df)
A B C
a 6.5 1 6.5
b 6.8 0 0.3
c 7.0 0 0.5
f 6.0 1 6.0
h 6.1 0 0.1
i 6.2 0 0.2
详情:
print (df['A'].where(m).ffill())
a 6.5
b 6.5
c 6.5
f 6.0
h 6.0
i 6.0
Name: A, dtype: float64