如何在dataframe中添加/插入返回多个字段(作为新列)的函数调用的输出?

2024-10-02 04:30:52 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在dataframe中添加/插入返回多个字段(作为新列)的函数调用的输出

示例代码&;数据:

from pandas import DataFrame
People_List = [['Jon','Smith',21],['Mark','Brown',38],['Maria','Lee',42],['Jill','Jones',28],['Jack','Ford',55]]
df = DataFrame (People_List,columns=['First_Name','Last_Name','Age'])
print (df)


  First_Name Last_Name  Age
0        Jon     Smith   21
1       Mark     Brown   38
2      Maria       Lee   42
3       Jill     Jones   28
4       Jack      Ford   55


def getTitleBirthYear(df):
    if 'Maria' in df.First_Name:
        title='Ms'
    else:
        title='Mr' 
    current_year = int('2020')
    birth_year=''
    age = df.Age
    birth_year = current_year - age
    return title,birth_year

getTitleBirthYear(df)

  title birth_year
0 Mr    1999
1 Mr    1982
2 Ms    1978
3 Mr    1992
4 Mr    1965

最终预期输出:

  First_Name Last_Name  Age title   birth_year
0        Jon     Smith   21 Mr      1999
1       Mark     Brown   38 Mr      1982
2      Maria       Lee   42 Ms      1978
3       Jill     Jones   28 Mr      1992
4       Jack      Ford   55 Mr      1965

请建议。谢谢


Tags: namedfagetitleyearfirstmarksmith
2条回答

尽管您可以apply,但最好使用向量化函数(请参见When should I (not) want to use pandas apply() in my code?)。您的逻辑可以简化如下:

print (df.assign(title=np.where(df["First_Name"].eq("Maria"), "Ms", "Mr"),
                 birth_year=pd.Timestamp.now().year-df["Age"])) # or 2020-df["Age"]

  First_Name Last_Name  Age title  birth_year
0        Jon     Smith   21    Mr        1999
1       Mark     Brown   38    Mr        1982
2      Maria       Lee   42    Ms        1978
3       Jill     Jones   28    Mr        1992
4       Jack      Ford   55    Mr        1965

这里有两种方法,应用和创建新列

df[['title', 'birth_year']] = pd.DataFrame(df.apply(getTitleBirthYear, axis=1).tolist())

df[['title', 'birth_year']] = df.apply(getTitleBirthYear, axis=1, result_type='expand')

  First_Name Last_Name  Age title  birth_year
0        Jon     Smith   21    Mr        1999
1       Mark     Brown   38    Mr        1982
2      Maria       Lee   42    Ms        1978
3       Jill     Jones   28    Mr        1992
4       Jack      Ford   55    Mr        1965

相关问题 更多 >

    热门问题