请帮助我精通Python算法的人。 我有一个包含两列的数据框:a和b。这里,“ A”列是行的数量,其中“ B”列是由0和1值组成的二进制列。
A B
1 1
2 0
3 0
4 1
5 1
6 0
7 0
如何添加一列C,该列计算值“ 1”的块,如下所示。
A B C
1 1 1
2 0
3 0
4 1 2
5 1 2
6 0
7 1 3
谢谢!
答案 0 :(得分:1)
df["C"] = df["B"].cumsum() * df["B"]
每次达到1时,累积总和将增加,将其乘以b将在没有增加的任何地方放置零。
如果需要,则可以将零设置为NA(如果这是您需要的话)(不确定列表中的空值意味着什么)
答案 1 :(得分:1)
如果需要丢失aor或其他值,请使用numpy.where
并使用由偏移值创建的掩码,以使其不等于累积和:
df["C"] = np.where(df['B'] == 1, (df['B'].ne(df['B'].shift()) * df['B']).cumsum(), np.nan)
print (df)
A B C
0 1 1 1.0
1 2 0 NaN
2 3 0 NaN
3 4 1 2.0
4 5 1 2.0
5 6 0 NaN
6 7 1 3.0
如果需要0
处理不匹配的值,则采用另一种解决方案:
df["C"] = (df['B'].ne(df['B'].shift()) * df['B']).cumsum() * df['B']
print (df)
A B C
0 1 1 1
1 2 0 0
2 3 0 0
3 4 1 2
4 5 1 2
5 6 0 0
6 7 1 3