Если ваши даты отформатированы правильно, этот код должен вам помочь:
# Dataframe Example
df = pd.DataFrame(
{'Test': [dt.date(2016,1,1),1,2,3],
'Test2': [dt.date(2017,1,3),1,2,4],
'Test3': [dt.date(2029,4,22),1,2,3],
'Test4': [dt.date(2034,3,1),1,2,4]}
)
df.index = [dt.date(2019,1,1),dt.date(2019,1,2),dt.date(2019,1,3),dt.date(2019,1,4)]
display(df)
for i in df:
for j in arange(1, len(df)):
if df[i][0] < df.index[j]:
df[i][j] = 0
display(df)
Вывод:
Test Test2 Test3 Test4
2019-01-01 2016-01-01 2017-01-03 2029-04-22 2034-03-01
2019-01-02 1 1 1 1
2019-01-03 2 2 2 2
2019-01-04 3 4 3 4
Test Test2 Test3 Test4
2019-01-01 2016-01-01 2017-01-03 2029-04-22 2034-03-01
2019-01-02 0 0 1 1
2019-01-03 0 0 2 2
2019-01-04 0 0 3 4
Если нет, вот пример того, как выполнить преобразование строкправильно:
# Dataframe Example
df = pd.DataFrame(
{'Test': ['2016/JAN/2',1,6],
'Test2': ['2017/APR/19',2,5],
'Test3': ['2029/MAY/03', 3,4]
})
df.index = ['Sell Date',dt.date(2019,1,1),dt.date(2019,1,2)]
display(df)
months = pd.DataFrame({'Month': ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC']})
newdf = pd.DataFrame(df)
for i in df:
for j in range(len(months)):
if df[i][0][5:5+3] == months.Month[j]:
newdf[i][0] = newdf[i][0].replace(newdf[i][0][5:5+3],str(j+1))
newdf[i][0] = datetime.datetime.strptime(newdf[i][0], "%Y/%m/%d").date()
break
display(newdf)
# Delete Column
for i in df:
for j in arange(1, len(newdf)):
if newdf[i][0] < newdf.index[j]:
newdf[i][j] = 0
display(newdf)
Вывод:
Test Test2 Test3
Sell Date 2016/JAN/2 2017/APR/19 2029/MAY/03
2019-01-01 1 2 3
2019-01-02 6 5 4
Test Test2 Test3
Sell Date 2016-01-02 2017-04-19 2029-05-03
2019-01-01 1 2 3
2019-01-02 6 5 4
Test Test2 Test3
Sell Date 2016-01-02 2017-04-19 2029-05-03
2019-01-01 0 0 3
2019-01-02 0 0 4