我有以下数据框。
Team Opponent Detail
Redskins Rams Kirk Cousins .... Penaltyon Bill Smith, Holding:10 yards
我想要做的是使用pandas创建三列,这将给出我的名字(在这种情况下是Bill Smith),违规类型(进攻性持有),以及团队花费多少(10码)。所以它看起来像这样
Team Opponent Detail Name Infraction Yards
Redskins Rams Bill Smith Holding 10 yards
我使用了一些字符串操作来实际提取字段,但不知道如何创建新列。我查看了一些旧列,但似乎无法让它工作。谢谢!
答案 0 :(得分:0)
你的函数应返回3个值,例如......
def extract(r):
return r[28:38], r[-8:], r[-16:-9]
首先创建空列:
df["Name"] = df["Infraction"] = df["Yards"] = ""
...然后投射"结果"列表。
df[["Name", "Infraction", "Yards"]] = list(df.Detail.apply(extract))
您可能会对this更具体但更广泛的答案感兴趣。
答案 1 :(得分:0)
要创建新列,您只需执行以下操作:
your_df['new column'] = something
例如,假设您想要一个包含列详细信息
列的第一个单词的新列#toy dataframe
my_df = pd.DataFrame.from_dict({'Team':['Redskins'], 'Oponent':['Rams'],'Detail':['Penaltyon Bill Smith, Holding:10 yards ']})
#apply a function that retrieves the first word
my_df['new_word'] = my_df.apply(lambda x: x.Detail.split(' ')[0], axis=1)
这将创建一个包含" Penaltyon"
的列现在,想象一下,我现在想要两个新列,一个用于第一个字,另一个用于第二个字。我可以用这两列创建一个新的数据框:
new_df = my_df.apply(lambda x: pd.Series({'first':x.Detail.split(' ')[0], 'second': x.Detail.split(' ')[1]} ), axis=1)
现在我只需要连接两个数据帧:
pd.concat([my_df, new_df], axis=1)