我的胸罩看起来像

data = {
    "ReportName": ["Sample cycle", 'Message',  "ID", "m1", "Uncertainty m1", "Message", "Sample cycle", 'Message', "ID", "m0", "Uncertainty m0", "Message", "ID", "m1", "Uncertainty m1", "Message"],
    "Values": [ "1","NO", "II", None, None, "NO", "1", "NO", "ID1", "1.8", "0.43", "NO", "ID2", "1.5", "0.41", "NO"],
}

df = pd.DataFrame(data)

I我使用此函数创建了一个新的"ID"列

def extract_id(row):
    if row['ReportName'] == 'ID':
        return row['Values']
    return None

现在,我要用ID从ReportName =='Sample cycle'到下一个'Sample cycle'填充Na.

期望输出

        ReportName Values    ID
0     Sample cycle      1  None
1          Message     NO    II
2               ID     II    II
3               m1   None    II
4   Uncertainty m1   None    II
5          Message     NO    II
6     Sample cycle      1  None
7          Message     NO   ID1
8               ID    ID1   ID1
9               m0    1.8   ID1
10  Uncertainty m0   0.43   ID1
11         Message     NO   ID1
12              ID    ID2   ID2
13              m1    1.5   ID2
14  Uncertainty m1   0.41   ID2
15         Message     NO   ID2

推荐答案

您可以使用groupby.transform个口罩:

# identify rows with ID
m1 = df['ReportName'].eq('ID')
# identify rows with "Sample cycle"
# this is used both to form groups
# and to mask the output
m2 = df['ReportName'].eq('Sample cycle')

df.loc[~m2, 'ID'] = (df['Values'].where(m1).groupby(m2.cumsum())
                     .transform(lambda x: x.ffill().bfill())
                    )

输出:

        ReportName Values   ID
0     Sample cycle      1  NaN
1          Message     NO   II
2               ID     II   II
3               m1   None   II
4   Uncertainty m1   None   II
5          Message     NO   II
6     Sample cycle      1  NaN
7          Message     NO  ID1
8               ID    ID1  ID1
9               m0    1.8  ID1
10  Uncertainty m0   0.43  ID1
11         Message     NO  ID1
12              ID    ID2  ID2
13              m1    1.5  ID2
14  Uncertainty m1   0.41  ID2
15         Message     NO  ID2

Python相关问答推荐

仿制药的类型铸造

将整组数组拆分为最小值与最大值之和的子数组

numba jitClass,记录类型为字符串

如何在Python中将returns.context. DeliverresContext与Deliverc函数一起使用?

numpy卷积与有效

如何调整QscrollArea以正确显示内部正在变化的Qgridlayout?

基于索引值的Pandas DataFrame条件填充

Python+线程\TrocessPoolExecutor

可以bcrypts AES—256 GCM加密损坏ZIP文件吗?

pandas:在操作pandora之后将pandora列转换为int

BeautifulSoup-Screper有时运行得很好,很健壮--但有时它失败了::可能这里需要一些更多的异常处理?

查看pandas字符列是否在字符串列中

你能把函数的返回类型用作其他地方的类型吗?'

如何使用加速广播主进程张量?

为什么dict. items()可以快速查找?

对数据帧进行分组,并按组间等概率抽样n行

具有不匹配列的2D到3D广播

如何在Polars中处理用户自定义函数的多行结果?

try 使用RegEx解析由标识多行文本数据的3行头组成的日志(log)文件

牛郎星直方图中分类列的设置顺序