为什么存储“for 循环”的结果不起作用?

时间:2021-04-30 10:18:42

标签: python pandas dataframe for-loop

我有两个数据框:

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'])
       

但是,我只保存(对于第一个代码)最后一个值。

我做错了什么?

有人可以帮我吗?

谢谢!

3 个答案:

答案 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 循环范围的详细信息:

Scoping in Python 'for' loops

输出子集

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