У меня есть Dataframe с 15K строк.Если в столбце 'val1' повторяются 3, я хочу установить каждую секунду на ноль.Если «val1» не повторяется, то стоит остаться 3. Я могу добиться этого с помощью итерации по фрейму данных, но это медленно
У меня есть что-то вроде этого:
import pandas as pd
dates = pd.date_range('2008-10-01', periods=15, freq='D')
df = pd.DataFrame({'val1': (0,0,3,3,3,3,3,0,0,3,0,3,3,3,0) },index=dates)
print(df)
val1
2008-10-01 0
2008-10-02 0
2008-10-03 3
2008-10-04 3
2008-10-05 3
2008-10-06 3
2008-10-07 3
2008-10-08 0
2008-10-09 0
2008-10-10 3
2008-10-11 0
2008-10-12 3
2008-10-13 3
2008-10-14 3
2008-10-15 0
What I want to archive is this:
df = pd.DataFrame({ 'val1': (0,0,3,3,3,3,3,0,0,3,0,3,3,3,0),'val2': (0,0,3,0,3,0,3,0,0,3,0,3,0,3,0)},index=dates )
print(df)
val1 val2
2008-10-01 0 0
2008-10-02 0 0
2008-10-03 3 3
2008-10-04 3 0
2008-10-05 3 3
2008-10-06 3 0
2008-10-07 3 3
2008-10-08 0 0
2008-10-09 0 0
2008-10-10 3 3
2008-10-11 0 0
2008-10-12 3 3
2008-10-13 3 0
2008-10-14 3 3
2008-10-15 0 0
Единственное работающее решениеЯ нашел, чтобы перебирать строки, что ужасно медленно ..:
df['val3']=0
for i in range(0,len(df.index)):
if (df['val1'][i]==3) & (df['val1'][i-1]==3) & (df['val2'][i-2]!=3):
df['val3'][i-1]=3
if (df['val1'][i]==0) & (df['val1'][i-1]==3):
df['val3'][i-1]=3
val1 val2 val3
2008-10-01 0 0 0
2008-10-02 0 0 0
2008-10-03 3 3 3
2008-10-04 3 0 0
2008-10-05 3 3 3
2008-10-06 3 0 0
2008-10-07 3 3 3
2008-10-08 0 0 0
2008-10-09 0 0 0
2008-10-10 3 3 3
2008-10-11 0 0 0
2008-10-12 3 3 3
2008-10-13 3 0 0
2008-10-14 3 3 3
2008-10-15 0 0 0
Any suggestions to achieve this without iteration or to make iterartion faster?