我在像这样的pandas数据框中有数据:
id | month | count
-------------------
01 | 1 | 517
02 | 1 | 283
01 | 2 | 123
02 | 2 | 321
03 | 2 | 332
因此,相同的ID可以针对不同的月份出现,但有时情况并非如此。 (例如,在上面的例子中,id 03不会出现在第1个月。
我想要做的是创建一个新列previous_month_count
,它会回顾上一个月是否出现ID,并返回计数或者如果没有上个月计数,则返回null或0。
dup = df
dup = dup.rename(columns={"month": "previous_month"}, inplace=True)
df['previous_month'] = df['month'] -1
df.merge(dup[['count']], on=['id','previous_month'])
这会生成
KeyError:'月'
但是,期望的效果是将上个月的计数与当前月份的计数合并。
答案 0 :(得分:1)
使用您自己的代码
dup = df.copy()
dup.rename(columns={"month": "previous_month"}, inplace=True)
df['previous_month'] = df['month'] -1
df.merge(dup, on=['id','previous_month'],how='left')
Out[358]:
id month count_x previous_month count_y
0 1 1 517 0 NaN
1 2 1 283 0 NaN
2 1 2 123 1 517.0
3 2 2 321 1 283.0
4 3 2 332 1 NaN