将字符串对象拆分为pandas列

时间:2019-11-26 12:39:46

标签: python pandas function numpy

Hello World

我有一个包含三个列(名称,代码,值)的序列对象,该列是从以下函数中获取的:

def get_fuzz(df, w):
    s = df['Legal_Name'].apply(lambda y: fuzz.token_set_ratio(y, w))
    idx = s.idxmax()
    return {'name': df['Legal_Name'].iloc[idx], 'lei': df['LEI'].iloc[idx], 'val': s.max()}

df1['Name'].apply(lambda x: get_fuzz(df, x))

意甲看起来像这样

output
0    {'name': 'MGR Farms LLC', 'lei': '984500486BBD...
1    {'name': 'RAVENOL NORGE AS', 'lei': '549300D2O...
2    {'name': 'VCC Live Group Zártkörűen Működő Rés...

我可以使用以下代码将输出分配给我的数据框。

df1.assign(search=df1['Name'].apply(lambda x: get_fuzz(df, x)))

我得到的数据框看起来像这样

    ID  Name             search
0   1   Marshalll   {'name': 'MGR Farms LLC', 'lei': '984500486BBD...
1   2   JP Morgan   {'name': 'RAVENOL NORGE AS', 'lei': '549300D2O...

问题

如何将此列分为三列?

想要最终输出

    ID  Name        Name_bis            LEI             Value
0   1   Marshalll   MGR Farms LLC    984500486BBD        57
1   2   Zion        ZION INVESTMENT  549300D2O           100

1 个答案:

答案 0 :(得分:1)

假设您将数据框设置为:-

>>> df
   ID       Name                                             search
0   1  Marshalll  {'name': 'MGR Farms LLC', 'lei': '984500486BBD...
1   2  JP Morgan  {'name': 'RAVENOL NORGE AS', 'lei': '549300D2O...

您可以使用:-

>>> df = pd.concat([df.drop(['search'], axis=1), df['search'].apply(pd.Series)], axis=1)
>>> df
   ID       Name              name           lei  value
0   1  Marshalll     MGR Farms LLC  984500486BBD     57
1   2  JP Morgan  RAVENOL NORGE AS     549300D2O    100

然后根据需要更新列名称:-

>>> df.columns = ['ID', 'Name', 'Name_bis', 'LEI', 'Value']
>>> df
    ID       Name          Name_bis           LEI  Value
0   1  Marshalll     MGR Farms LLC  984500486BBD     57
1   2  JP Morgan  RAVENOL NORGE AS     549300D2O    100