将一列值分成2列

时间:2019-02-07 20:03:10

标签: python python-3.x pandas python-2.7

我有这样的数据:

Col
Texas[x]
Dallas
Austin
California[x]
Los Angeles
San Francisco

这是我想要的:

col1              Col2
Texas[x]          Dallas
                  Austin
California[x]     Los Angeles
                  San Francisco

请帮助!

2 个答案:

答案 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,并且仅在城市后面紧跟着州的情况下才有效,这似乎就像您在数据样本中所做的那样。