【问题标题】:How to iterate over a column in a Pandas DF to check for a certain value and return a value in the same row but from a different column?如何遍历 Pandas DF 中的列以检查某个值并返回同一行但来自不同列的值?
【发布时间】:2020-02-07 09:36:17
【问题描述】:
df 包含基于事件的足球数据。因此,我要做的是遍历 action_name 列并查找值“目标”(如果找到),然后我想存储与“目标”操作名称位于同一行的多个其他列的值。以下是数据结构的示例。
所以在这种情况下,我想为 DF 中的每个目标返回 pos_dest_x、pos_dest_y 和 possesion_number,并将它们存储为新的 DF。
【问题讨论】:
标签:
python
pandas
loops
dataframe
【解决方案1】:
这样做的各种方式:
columns_wanted = ['pos_dest_x','pos_dest_y','possession_number']
# 1
df.loc[df.action_name == 'Goal'][columns_wanted]
# 2
df[df.action_name == 'Goal'][columns_wanted]
# 3
df.query('action_name == "Goal"')[columns_wanted]
在情况 1 和 2 中,您可以使用 df.action_name 或 df['action_name']
您可以在这里找到更多信息:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html
【解决方案2】:
这应该可以解决问题:
df.loc[df["action_name"]=="Goal", ["pos_dest_x", "pos_dest_y", "possesion_number"]]
【解决方案3】:
假设您的 df 的名称为 actions_df,您应该能够运行如下内容:
goals_df = actions_df[actions_df['action_name']=="Goal"][['pos_dest_x','pos_dest_y','possession_number']]
从actions_df 中选择行,其中action_name 等于目标,然后将列过滤到您想要查看的列。
【解决方案4】:
如果您的数据框名为 df.你可以这样做:
reduced_dataset = df[df['action_name']=='Goal']
这将为您生成动作为目标的数据集。