Python Pandas-Groupby多列、筛选特定值特定列和fillna

Python Pandas-Groupby多列、筛选特定值特定列和fillna,python,pandas,Python,Pandas,我有一个很大的数据集,数据杂乱无章。数据如下所示: df1 = pd.DataFrame({'Batch':[1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], 'Case':[1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2], 'Live':['Yes', 'Yes', 'No', 'Yes', 'No', 'No', 'Yes', '

我有一个很大的数据集,数据杂乱无章。数据如下所示:

df1 = pd.DataFrame({'Batch':[1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2],
                    'Case':[1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2],
                    'Live':['Yes', 'Yes', 'No', 'Yes', 'No', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'No', 'Yes', 'Yes', 'No'],
                    'Task':['Download', nan, 'Download', 'Report', 'Report', nan, 'Download', nan, nan, nan, 'Download', 'Download', 'Report', nan, 'Report']

    })
在本例中,请设想“nan”实际上是一个空单元格,而不是一个表示“nan”的字符串

我需要按“批次”分组,然后按“案例”分组,筛选“Live”值为“Yes”的实例,然后向下填充

我基本上希望它看起来像

我目前的做法是:

df['Task'] = df.groupby(['Batch','Case'])['Live'].filter(lambda x: x == 'Yes')['Task'].fillna(method='ffill')
我已经尝试了许多变体,但是我不断地得到错误,比如过滤器必须返回布尔结果

有人知道我该怎么做吗?

你不需要过滤,你可以在groupby之前对live的Yes进行切片


谢谢,它似乎填充了“是”行。但是,在“否”行有任务的情况下,它似乎正在删除该行的任务条目。你知道这可能是什么原因吗?
df1.Task=df1.loc[df1.Live=='Yes'].groupby(['Batch','Case']).Task.ffill()
df1
Out[620]: 
    Batch  Case Live      Task
0       1     1  Yes  Download
1       1     1  Yes  Download
2       1     1   No       NaN
3       1     2  Yes    Report
4       1     2   No       NaN
5       1     2   No       NaN
6       1     2  Yes  Download
7       1     2  Yes  Download
8       1     2  Yes  Download
9       2     1  Yes       NaN
10      2     1  Yes  Download
11      2     1   No       NaN
12      2     2  Yes    Report
13      2     2  Yes    Report
14      2     2   No       NaN