我对我的数据框有疑问。具体来说,在每一列中,我有一列发言人和讲话清单。现在,我想根据说话者是否正是我要寻找的语言来选择一个语音,这将在另一栏中注明。因此,一列提供了我正在寻找的姓氏,另一列提供了所有发言人(名字和姓氏)及其语音的列表,我想创建一个新列,此语音存储在相应的行中。

所以我的初始数据集看起来像这样:

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)

10-07 19:00
查看更多