我有一个包含多年捐赠者信息的数据集,需要在捐赠者跳过一年时插入行。实际数据框中有数千条记录,但示例如下:
import pandas as pd
df = pd.DataFrame([['A','2011',10], ['A','2012',10],['A','2013',10],['B','2011',20],
['B','2013',20]],columns=['donor_id','year','donation'])
df
donor_id year donation
0 A 2011 10
1 A 2012 10
2 A 2013 10
3 B 2011 20
4 B 2013 20
我需要在2012年为捐赠者B插入零捐款,因此最终应该看起来像这样。
donor_id year donation
0 A 2011 10
1 A 2012 10
2 A 2013 10
3 B 2011 20
4 B 2012 0
5 B 2013 20
我尝试了几种类似的解决方案,但还没有成功。 这个 解决方案看起来正是我需要的,但我失去了大约一半的数据帧行,并且无法弄清楚为什么会发生这种情况。
df = pd.read_csv(r'filepath')
df = df.drop_duplicates(subset=['donor_id','year'])
df['year_DT'] = pd.to_datetime(df['year'])
df = (df.set_index('year_DT').
groupby('donor_id').
apply(lambda x: x.asfreq(freq='Y')).
drop('donor_id', axis=1))
df = df.reset_index()
df["Index"] = df.groupby('donor_id').cumcount()+1