在数据框中一起Apply()和get()

问题描述 投票:0回答:1

我有一列名称(“名称”),其中也可能包含 2 个版本,也称为(又名),例如“约翰·斯诺别名伊耿·坦格利安”和“提利昂·兰尼斯特@小鬼”。 根据分隔符,它可能是正常的又名(如果 sep“别名”),或 lqaka(低质量又名如果 sep“@”)。我想将它们添加到两个新的单独列(“aka”和“lqaka”)。

所以我的功能是:

def get_akas(str):
delims = {"alias":"aka", "@":"lqaka"}
akas = {}
for key in delims:
    if key in str:
        akas[delims[key]] = str.split(key, 1)[1]
        return akas

然后我用了apply并聚在一起:

df["aka"] = df["name"].apply(get_akas).get("aka","")

df["lqaka"] = df["name"].apply(get_akas).get("lqaka","")

这不起作用。我很确定我使用 apply 和 get 的方式是不正确的。冬天到来之前有人可以帮忙吗?

pandas dataframe get apply
1个回答
0
投票

我想你就快到了:

import pandas as pd

df = pd.DataFrame({
    "name": ["John Snow alias Aegon Targaryen", "Tyrion Lannister @ The Imp"]
})

def get_akas(s):
    delims = {"alias": "aka", "@": "lqaka"}
    akas = {'aka': None, 'lqaka': None}
    for key, value in delims.items():
        if key in s:
            akas[value] = s.split(key, 1)[1].strip()
    return akas['aka'], akas['lqaka']

df[['aka', 'lqaka']] = df['name'].apply(lambda x: get_akas(x)).apply(pd.Series)

print(df)

这会给你

                              name              aka    lqaka
0  John Snow alias Aegon Targaryen  Aegon Targaryen     None
1       Tyrion Lannister @ The Imp             None  The Imp
© www.soinside.com 2019 - 2024. All rights reserved.