我用熊猫: 输入:
import pandas as pd
a=pd.Series([0,0,1,0,0,0,0])
输出:
0 0
1 0
2 1
3 0
4 0
5 0
6 0
我想以相同的值获取下一行的数据:
输出:
0 0
1 0
2 1
3 1
4 1
5 1
6 0
使用
a+a.shift(1)+a.shift(2)+a.shift(3)
我认为这不是一个聪明的解决方案 谁有一个聪明的解决方案
答案 0 :(得分:0)
您可以尝试这一点,假设索引6也应该是值1
,
a=pd.Series([0,0,1,0,0,0,0])
a.eq(1).cumsum()
Out[19]:
0 0
1 0
2 1
3 1
4 1
5 1
6 1
dtype: int32
更新:多个值不等于0。
a=pd.Series([0,0,1,0,1,3,0])
a.ne(0).cumsum()
A=pd.DataFrame({'a':a,'Id':a.ne(0).cumsum()})
A.groupby('Id').a.cumsum()
Out[58]:
0 0
1 0
2 1
3 1
4 1
5 3
6 3
或者您可以使用ffill
a[a.eq(0)]=np.nan
a.ffill().fillna(0)
Out[64]:
0 0.0
1 0.0
2 1.0
3 1.0
4 1.0
5 3.0
6 3.0
答案 1 :(得分:0)
1您可以过滤“您的”值(SearchValue)的系列。
2将数据重新索引为待定长度(LengthOfIndex)并向前填充“your”给定次数(LengthOfFillRange)
3再次用零填充。
import pandas as pd
import numpy as np
a=pd.Series([0,0,1,0,0,0,0])
SearchValue = 1
LengthOfIndex = 7
LengthOfFillRange = 4
a=a[a==SearchValue]\
.reindex(np.linspace(1,LengthOfIndex,LengthOfIndex, dtype='int32'),
method='ffill',
limit=LengthOfFillRange)\
.fillna(0)
答案 2 :(得分:0)
如果您只需要重复2个值系列按某些限制使用replace
用于NaN
s,那么ffill
(fillna
使用方法ffill
)并持续fillna
用于将NaN
转换为原始值(如果需要,转换为int):
a=pd.Series([0,0,1,0,0,0,0,1,0,0,0,])
print (a)
0 0
1 0
2 1
3 0
4 0
5 0
6 0
7 1
8 0
9 0
10 0
dtype: int64
b= a.replace(0,np.nan).ffill(limit=2).fillna(0).astype(a.dtype)
print (b)
0 0
1 0
2 1
3 1
4 1
5 0
6 0
7 1
8 1
9 1
10 0
dtype: int64