基于某些ifs创建新的pandas列,并且还涉及行操作

时间:2018-01-15 09:41:40

标签: python pandas

假设我有一个以下性质的数据框架。 请注意索引不是连续的。

    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 你能协助制定这种逻辑吗?

1 个答案:

答案 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