Python 上一行值

Python Previous Row Value

我有一个数据集,其中有一个 header 行和多个这样关联的子行。

Step status
0   010000000409139
1   00001
2   00002
3   00003
4   00004
5   00007
6   00005
7   00006
8   00008
9   010000000473498
10  00001
11  00002

我想要的只是重复所有行的 header 行:

Step status
0   010000000409139
1   010000000409139
2   010000000409139
3   010000000409139
4   010000000409139
5   010000000409139
6   010000000409139
7   010000000409139
8   010000000409139
9   010000000473498
10  010000000473498
11  010000000473498

我试过像这样创建一个 lambda 函数:

def logic(step):
    if len(step) == 15:
        return step
    else:
        return step.shift()
pm2['StepLogic'] = pm2.apply(lambda x: logic(x['Step status']),axis=1)

我收到错误:AttributeError: ("'str' object 没有属性 'shift'", 'occurred at index 1')

有没有更聪明的方法来获得我想要的东西?

您可以通过检查 statuslen 创建一个布尔系列,使用 cumsum 创建一个组号,然后在其上 groupby 最后 transform:

df["status"] = df.groupby(df["status"].str.len().eq(15).cumsum())["status"].transform("first")

print (df)

    Step           status
0      0  010000000409139
1      1  010000000409139
2      2  010000000409139
3      3  010000000409139
4      4  010000000409139
5      5  010000000409139
6      6  010000000409139
7      7  010000000409139
8      8  010000000409139
9      9  010000000473498
10    10  010000000473498
11    11  010000000473498

试试这个:

df['Status'] = df['Status'].where(df['Status'].str.len().gt(5)).fillna(method='ffill')