return 当相应索引中没有行并从元组列表中切片时,零而不是空

return zero instead of nothing when no rows in the corresponding index, and slicing from a list of tuples

我有两个问题: 第一个: 我有以下代码

count_by_week=df[df['institution_id']==1].groupby(['group_ident','Year','Week'],observed=True, as_index=True)['activity_id','Teacher_ID','school_subject'].nunique()
g=[2332136, 2192823, 2192825]
Y21=[2021]
Y22=[2022]
l21=list(range(30,53,1))
l22=list(range(1,10,1))
for i in g:
    lw=list(itertools.product(i,Y21,l21))+list(itertools.product(i,Y22,l22))
    count_by_week.loc[count_by_week.index.isin(lw),:] 

我想要下面一行 count_by_week.loc[count_by_week.index.isin(lw),:] 到 return 0 而不是当相应的年和周没有项目时什么都没有。

和第二个: 如果我有以下包含三个元素(Id、Year、Week)的元组列表:

[ (2192825, 2021, 45),
 (2192825, 2021, 46),
 (2192825, 2021, 47),
 (2192825, 2021, 48),
 (2192825, 2021, 49),
 (2192825, 2021, 50),
 (2192825, 2021, 51),
 (2192825, 2021, 52),
 (2192825, 2022, 1),
 (2192825, 2022, 2),
 (2192825, 2022, 3),
]

我想在第 50 周和第 2 周之间获取这些项目。有什么办法吗? 我尝试了以下假设上面的列表称为 lw0 :

lw0[lw0.index(week1):lw0.index(week2)]

这没有用! 感谢任何建议

第一个问题。

你是这个意思吗?

int(bool(count_by_week.loc[count_by_week.index.isin(lw),:]))

第二题。 您必须在此处应用更多逻辑

def get_index_from_date(data, year, week):
    for i, d in enumerate(data):
        if d[1] == year and d[2] == week:
            return i

lwo[get_index_from_date(2021, 50):get_index_from_date(2022, 2)+1]

我想出了第一个问题的解决方案: 最后一行应使用 reindex() 函数进行修改:

count_by_week.loc[count_by_week.index.isin(lw),:].reindex((i for i in lw),fill_value=0) 

当相应索引中没有实例时,这将使代码 return 为零。