Python保留列值
我有一个熊猫数据框,看起来像这样(索引,位置): 状态值用星号标记,因此我想创建一个新列并用状态值填充它。我想根据任何带有星号的行为state赋值,然后为所有后续行填充该值,直到新行带有新值为止。在SAS中,这将通过retain语句完成,但我不知道它如何与熊猫一起工作 输出应为(索引、位置、状态): 等等 什么是一种简单而优雅的方法?您可以使用和创建的蒙版: 您可以将方法与以下内容结合使用: 创造性回答Python保留列值,python,pandas,Python,Pandas,我有一个熊猫数据框,看起来像这样(索引,位置): 状态值用星号标记,因此我想创建一个新列并用状态值填充它。我想根据任何带有星号的行为state赋值,然后为所有后续行填充该值,直到新行带有新值为止。在SAS中,这将通过retain语句完成,但我不知道它如何与熊猫一起工作 输出应为(索引、位置、状态): 等等 什么是一种简单而优雅的方法?您可以使用和创建的蒙版: 您可以将方法与以下内容结合使用: 创造性回答 df.iloc[:, 0].str.split('*').str[::-1] \ .ap
df.iloc[:, 0].str.split('*').str[::-1] \
.apply(pd.Series).replace('', np.nan).bfill(1).ffill()
严肃的回答
像@MaxU一样使用
extract
。不同之处在于我使用的是insert。没有什么比这更好的了,只是不同而已
df.insert(df.shape[1], 'State', df.iloc[:, 0].str.extract('(.*)\*'))
df = df.ffill()
df
print (df.col.str[-1] == '*')
0 True
1 False
2 False
3 False
4 True
5 False
6 False
Name: col, dtype: bool
df['new'] = df.col.str[:-1].where(df.col.str[-1] == '*').ffill()
print (df)
col new
0 California* California
1 LA California
2 San Diego California
3 Oakland California
4 Washington* Washington
5 Seattle Washington
6 Tacoma Washington
In [236]: df['State'] = df.Place.str.extract(r'([^\*]+)\*', expand=False).ffill()
In [237]: df
Out[237]:
Place State
0 California* California
1 LA California
2 San Diego California
3 Oakland California
4 Washington* Washington
5 Seattle Washington
6 Tacoma Washington
df.iloc[:, 0].str.split('*').str[::-1] \
.apply(pd.Series).replace('', np.nan).bfill(1).ffill()
df.insert(df.shape[1], 'State', df.iloc[:, 0].str.extract('(.*)\*'))
df = df.ffill()
df