我有一个像这样的pandas数据框(index,Place):
0 California*
1 LA
2 San Diego
3 Oakland
4 Washington*
5 Seattle
6 Tacoma
作为状态的Place中的值标有星号,因此我想创建一个新列并使用状态值填充它。我想根据具有星号的任何行为状态赋值,然后为所有后续行填充它,直到新行带有新值。在SAS中,这将通过保留声明完成,但我不知道它如何与熊猫一起使用。
输出应为(index,Place,State):
0 California* California
1 LA California
2 San Diego California
3 Oakland California
4 Washington* Washington
5 Seattle Washington
6 Tacoma Washington
等
这是一种简单而优雅的方式吗?
答案 0 :(得分:2)
您可以使用Series.where
和indexing with str创建的掩码使用ffill
:
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
答案 1 :(得分:1)
您可以将Series.str.extract()方法与Series.ffill()结合使用:
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
答案 2 :(得分:0)