搜索数据框中多列中的最后一次出现

时间:2017-02-27 14:32:26

标签: python pandas dataframe

假设我有一个类似于下面结构的大型数据框

 home| away|  home_score| away_score
    A|    B|           1|          0
    B|    C|           1|          1
    C|    A|           1|          0

我想找到最后的分数,无论家里/外。例如,团队A,B和C的最后得分分别为0,1和1,并填写回原始数据框:

 home| away|  home_score| away_score| last_score_home| last_score_away|
    A|    B|           1|          0|                |                |
    B|    C|           1|          1|               0|                |
    C|    A|           1|          0|               1|               1|
 ...

我尝试过groupby和shift,但我不确定如何结合home / away结果。

1 个答案:

答案 0 :(得分:4)

你可以试试这个。 1)通过在前两列名称中添加后缀,使所有列名可拆分; 2)拆分列标题并将其转换为多索引; 3)使用stack将表格格式化为长格式,由团队分组并获得最新分数:

df.columns = df.columns.str.replace("^([^_]+)$", "\\1_team").str.split("_", expand=True)
df.stack(level=0).groupby("team").tail(1)

#         score   team
#1  home      1      B
#2  away      0      A
#   home      1      C

更新

要将其合并回原始数据框,您可以使用join

df.columns = df.columns.str.replace("^([^_]+)$", "\\1_team").str.split("_", expand=True)
df1 = df.stack(level=0).groupby("team").tail(1)   

# join the result back to the original transformed data frame 
df2 = df.stack(level=0).join(df1.score, rsuffix = "_last").unstack(level=1)
df2.columns = [x + "_" + y for x, y in df2.columns]
df2

enter image description here