我有一列看起来像这样:
1
0
0
1
0
0
0
1
我希望输出看起来像这样:
1 <--
0
0
2 <--
0
0
0
3 <--
等等。我不确定从哪里开始。大约有10,000行,我想做一个if语句可能需要一段时间。如何获得此输出?
答案 0 :(得分:4)
高效简洁:
s.cumsum()*s
0 1
1 0
2 0
3 2
4 0
5 0
6 0
7 3
dtype: int64
答案 1 :(得分:2)
使用Series.cumsum + Series.where
以下是示例:
print(df)
0
0 1
1 0
2 0
3 1
4 0
5 0
6 0
7 1
df['0']=df['0'].cumsum().where(df['0'].ne(0),df['0'])
print(df)
0
0 1
1 0
2 0
3 2
4 0
5 0
6 0
7 3
答案 2 :(得分:1)
尝试一下:
s = pd.Series([1,0,0,1,0,0,0,1])
s.cumsum().mask(s==0, 0)
输出:
0 1
1 0
2 0
3 2
4 0
5 0
6 0
7 3
dtype: int64
答案 3 :(得分:0)
np.where
和cumsum
:
df['cum_sum'] = np.where(df.val>0, df.val.cumsum(), 0)
输出:
val cum_sum
0 1 1
1 0 0
2 0 0
3 1 2
4 0 0
5 0 0
6 0 0
7 1 3
答案 4 :(得分:0)
您可以做这样的事情
df = {'col1': [1, 0,0,0,1,0,0,1] }
count = 0
col = []
for val in zip(df['col1']):
if val[0] == 1:
count+=1
col.append(count)
else:
col.append(val[0])
您将获得[1, 0, 0, 0, 2, 0, 0, 3]
答案 5 :(得分:0)
仅选择非零行并将这些值替换为cum
import pandas as pd
df=pd.DataFrame({'col': [0,1,0,0,1,0,0,0,1,0] })
index=df["col"]!=0
df.loc[index,"col"]=df.loc[index,"col"].cumsum()
print(df)
col
0 0
1 1
2 0
3 0
4 2
5 0
6 0
7 0
8 3
9 0