Предпосылка: я новичок в панде и в основном в программировании.Я публикую свое решение больше, чтобы получить указания на лучшие способы сделать это, чем что-либо еще.Для меня было уже приятно иметь возможность добраться до этой точки, и я чувствовал, что код был по крайней мере достаточно чист, чтобы показать его (надеюсь, что все в порядке).Вероятно, мне придется потратить некоторое время на то, чтобы обернуться вокруг принятого ответа.
import pandas as pd
from datetime import datetime
from dateutil.relativedelta import relativedelta
start=[["02-01-2018", "05-31-2018", 40],
["01-01-2018", "03-31-2018", 12.3]]
df=pd.DataFrame(start,columns = ['std','end','v'])
df['std']=pd.to_datetime(df['std'])
df['end']=pd.to_datetime(df['end'])
df2=pd.DataFrame(columns = ['id', 'month_belongs', 'value'])
ix=0 # I'm sure there must be a better way here, than needing an index
for index, row in df.iterrows():
e,s =row['end'], row['std']
difference = relativedelta(e, s)
months = difference.months+1
while s <= e:
df2.loc[ix]=[index,s,row['v']/months]
s+= relativedelta(months=1)
ix+=1
print(df2)
вывод:
id month_belongs value
0 0 2018-02-01 10.0
1 0 2018-03-01 10.0
2 0 2018-04-01 10.0
3 0 2018-05-01 10.0
4 1 2018-01-01 4.1
5 1 2018-02-01 4.1
6 1 2018-03-01 4.1