2 回答
TA贡献1796条经验 获得超4个赞
使用 str.extract 创建列然后清理
df.Col.str.extract('(.*\[x\])?(.*)').ffill()\
.replace('', np.nan).dropna()\
.rename(columns = {0:'Col1', 1: 'Col2'})\
.set_index('Col1')
Col2
Col1
Texas [x] Dallas
Texas [x] Austin
California [x] Los Angeles
California [x] San Francisco
更新:解决后续问题。
df.Col.str.extract('(.*\[x\])?(.*)').ffill()\
.replace('', np.nan).dropna()\
.rename(columns = {0:'Col1', 1: 'Col2'})
你得到
Col1 Col2
1 Texas[x] Dallas
2 Texas[x] Austin
4 California[x] Los Angeles
5 California[x] San Francisco
TA贡献1807条经验 获得超9个赞
似乎[x]代表列表中的状态。您可以尝试使用iterrows. 像这样的东西:
state = None # initialize as None, in case something goes wrong
city = None
rowlist = []
for idx, row in df.iterrows():
# get the state
if '[x]' in row['Col']:
state = row['Col']
continue
# now, get the cities
city = row['Col']
rowlist.append([state, city])
df2 = pd.DataFrame(rowlist)
这假设您的初始数据框被调用df并且列名是Col,并且仅当城市后跟州时才有效,这似乎是从您的数据样本中得出的。
添加回答
举报