我有一个数据框df
,其日期为2003年1月1日至2017年6月30日:
dates
0 2003-01-01
1 2003-01-02
2 2003-01-03
3 2003-01-04
4 2003-01-05
5 2003-01-06
...
5284 2017-06-20
5285 2017-06-21
5286 2017-06-22
5287 2017-06-23
5288 2017-06-24
5289 2017-06-25
5290 2017-06-26
5291 2017-06-27
5292 2017-06-28
5293 2017-06-29
5294 2017-06-30
现在我有了第二个数据帧dt2
just_dates Counts
0 2003-01-02 1
1 2015-10-31 1
2 2015-11-01 14
3 2015-11-02 17
4 2015-11-03 11
5 2015-11-04 3
如果某个日期存在且不是零,我想将数据帧dt2
的计数写为dates
中的新列。
所以我的预期输出是:
dates counts
0 2003-01-01 0
1 2003-01-02 1
2 2003-01-03 0
3 2003-01-04 0
4 2003-01-05 0
...
3523 2015-11-01 14
3524 2015-11-02 17
...
5293 2017-06-29 0
5294 2017-06-30 0
我尝试过这样的事情
df['counts']=df['dates'].isin(out['just_dates']).astype(int)
但这会给我一个零,如果日期存在或不存在,并且我想在“ counts”中包含相对数字。
答案 0 :(得分:1)
您可以使用带有左联接的合并:
“左外部联接从表A产生完整的记录集, 表B中的匹配记录(如果有)。 匹配,则右侧将包含null。”
df = pd.merge(df, df2, how='left', left_on='dates', right_on='just_dates')
由于左外部联接将产生null / nan值,因此我们必须将其填充为0。我们还想删除多余的列:
df['Counts'].fillna(0, inplace=True)
df.drop(columns=['just_dates'], inplace=True)
使用inplace=True
来实际更改列的内容。