大量计算块的Python算法

时间:2019-06-17 08:03:07

标签: python pandas algorithm dataframe counting

请帮助我精通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

谢谢!

2 个答案:

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