我有这样的数据:
Col
Texas[x]
Dallas
Austin
California[x]
Los Angeles
San Francisco
这是我想要的:
col1 Col2
Texas[x] Dallas
Austin
California[x] Los Angeles
San Francisco
请帮助!
答案 0 :(得分:2)
使用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
答案 1 :(得分:0)
好像[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
,并且仅在城市后面紧跟着州的情况下才有效,这似乎就像您在数据样本中所做的那样。