我有两个数据框:
daily = pd.DataFrame({'Date': pd.date_range(start="2021-01-01",end="2021-04-29")})
pc21 = pd.DataFrame({'Date': ["21-01-2021", "11-03-2021", "22-04-2021"]})
pc21['Date'] = pd.to_datetime(pc21['Date'])
我想要做的是为 daily
创建另一个列,如果 pc21
中的日期在 daily
中,则值为 1,否则为 0。这是我的代码:
l=[]
for i in range(len(pc21['Date'])):
x = daily['Date'].eq(pc21['Date'][i]).astype(int)
l.append(x)
print(l)
# I also tried:
for i in range(len(pc21['Date'])):
daily['newcol'] = daily['Date'].eq(pc21['Date'][i]).astype(int)
daily['newcol'].append(daily['newcol'])
但是,我只保存(对于第一个代码)最后一个值。
我做错了什么?
有人可以帮我吗?
谢谢!
答案 0 :(得分:1)
不要去写那么多复杂的代码,只需编写这一行代码即可。
daily["Daily"]= daily.Date.isin(pc21.Date).astype(int)
答案 1 :(得分:1)
由于范围问题,For 循环很可能不起作用。
daily['newcol'] = np.where(daily.Date.isin(pc21.Date),1,0)
可以在此处找到 for 循环范围的详细信息:
输出子集
daily.query('newcol.eq(1)')
Date newcol
20 2021-01-21 1
111 2021-04-22 1
答案 2 :(得分:1)
您可以使用:
daily['matched'] = daily['Date'].isin(pc21['Date'].to_numpy()).astype(int)
结果检查:
daily[daily['matched'] == 1]
Date matched
20 2021-01-21 1
111 2021-04-22 1