熊猫多列匹配,然后向后移动以寻找价值

时间:2019-10-21 16:19:42

标签: python-3.x pandas

非常感谢您的帮助。我是Pandas的python菜鸟,已经被这个问题困扰了。

我在该网站上搜索了大约100个不同的查询,但找不到合适的内容。我最接近的是使用布尔型蒙版。

请单击下面的文本以找到我的数据框。

I would like to run a query on the dataset to find the previous row where the 'AwayTeam' string is found in the 'HomeTeam' column -> I would then like to pull in the value of 'home_form' for that matching incidence as an additional column

日期HomeTeam AwayTeam home_form away_form new_column
2019年8月25日史特拉斯堡雷恩1.0 3.0 Nan(第25行,只是一个例子)
01/09/2019雷恩尼斯3.0 3.0 3.0(第37行,只是一个例子)

我想在Homeway在AwayTeam列中出现的最后一行中提取上一个“ away_form”值

1 个答案:

答案 0 :(得分:0)

这不是一个完整的解决方案,但我想我找到了一种方法来帮助您取得一些进步。

这里是步骤:

  1. 创建一个示例数据框,仅供说明
  2. 将“ HomeTeam”列转换为列表…这是目标列。

  3. 创建一个空列表来存储“ HomeTeam”列的搜索结果

  4. 在“ AwayTeam”列中巡视各个团队

  5. 使用Python的list.index()方法返回匹配项的索引…,但请尝试使用-除非您找不到匹配项。

  6. 将结果存储到列表

  7. 在完成for循环后,将该列表作为新列添加到pandas数据框中。

import pandas as pd
import numpy as np

# create sample dataframe
df = pd.DataFrame({
    'Date': ['2019-08-18', '2019-08-25'], 
    'HomeTeam': ['Rennes', 'Strasbourg'],
    'AwayTeam': ['Paris SG', 'Rennes'],
    'home_form': [np.NaN, 1.0],
    'away_form': [np.NaN, 3.0],
})

# convert your 'HomeTeam' column into a Python list
list_HomeTeam = list(df['HomeTeam'])
print(list_HomeTeam)

# create an empty list to capture the index position of matches in 'HomeTeam'
list_results_in_home = []

# loop through each team in the 'AwayTeam column'
for each_team in df['AwayTeam']:

    # if you find a match in the list, store index as a result
    try:
        result = list_HomeTeam.index(each_team)

    # if you don't find a match, store a string
    except:
        result = 'team not in list'

    # add the result to the list that is capturing the index position in 'HomeTeam'
    list_results_in_home.append(result)

print(list_index_home)

# add column to dataframe with the index position
df['index_match_in_HomeTeam'] = list_results_in_home