我对我的数据框有疑问。具体来说,在每一列中,我有一列发言人和讲话清单。现在,我想根据说话者是否正是我要寻找的语言来选择一个语音,这将在另一栏中注明。因此,一列提供了我正在寻找的姓氏,另一列提供了所有发言人(名字和姓氏)及其语音的列表,我想创建一个新列,此语音存储在相应的行中。
所以我的初始数据集看起来像这样:
ticker year quarter exel_lname jobposition speech
xx 2009 1 Angle CEO [("Mike Angle", "Thank you"), ("Barbara Barth", "It is")]
xx 2009 1 Barth CFO [("Mike Angle", "Thank you"), ("Barbara Barth", "It is")]
xx 2009 2 Angle CEO [("Mike Angle", "I am surprised"), ("Barbara Barth", "So am I")]
xx 2009 2 Barth CFO [("Mike Angle", "I am surprised"), ("Barbara Barth", "So am I")]
yy 2008 3 Cruz CEO [("Damien Cruz", "Hello"), ("Lara Dolm", "Nice to meet you")]
yy 2008 3 Dolm CFO [("Damien Cruz", "Hello"), ("Lara Dolm", "Nice to meet you")]
例如对于第一行,我想检查每个键值对是否第一个列表项包含姓氏,如果不继续,如果是,则使用语音部分(即第二个列表项)并将其存储在新列中。因此,我需要以下数据集(我在此处隐藏了初始列语音,但仍应将其包含在内,因此我不想替换它,仅创建一个新列)。
ticker year quarter exel_lname jobposition speechmanager
xx 2009 1 Angle CEO "Thank you"
xx 2009 1 Barth CFO "It is"
xx 2009 2 Angle CEO "I am surprised"
xx 2009 2 Barth CFO "So am I"
yy 2008 3 Cruz CEO "Hello"
yy 2008 3 Dolm CFO "Nice to meet you"
有人可以帮我如何在Python 3中解决这个问题吗?
谢谢!!
朱莉亚
最佳答案
最好的方法是编写一个函数,然后逐行应用它:
def get_speech(row):
matches = list(filter(lambda x: x[0].endswith(row['exel_lname']), row['speech']))
if len(matches) > 0:
return matches[0][1]
return ''
df['speechmanager'] = df.apply(get_speech, axis=1)