Python保留列值

Python保留列值,python,pandas,Python,Pandas,我有一个熊猫数据框,看起来像这样(索引,位置): 状态值用星号标记,因此我想创建一个新列并用状态值填充它。我想根据任何带有星号的行为state赋值,然后为所有后续行填充该值,直到新行带有新值为止。在SAS中,这将通过retain语句完成,但我不知道它如何与熊猫一起工作 输出应为(索引、位置、状态): 等等 什么是一种简单而优雅的方法?您可以使用和创建的蒙版: 您可以将方法与以下内容结合使用: 创造性回答 df.iloc[:, 0].str.split('*').str[::-1] \ .ap

我有一个熊猫数据框,看起来像这样(索引,位置):

状态值用星号标记,因此我想创建一个新列并用状态值填充它。我想根据任何带有星号的行为state赋值,然后为所有后续行填充该值,直到新行带有新值为止。在SAS中,这将通过retain语句完成,但我不知道它如何与熊猫一起工作

输出应为(索引、位置、状态):

等等

什么是一种简单而优雅的方法?

您可以使用和创建的蒙版:

您可以将方法与以下内容结合使用:

创造性回答

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