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')
有没有更聪明的方法来获得我想要的东西?
您可以通过检查 status
的 len
创建一个布尔系列,使用 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')
我有一个数据集,其中有一个 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')
有没有更聪明的方法来获得我想要的东西?
您可以通过检查 status
的 len
创建一个布尔系列,使用 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')