在 Pandas 中合并具有多个条件的两个数据帧

时间:2021-03-04 19:17:33

标签: python pandas

出于某种原因,我无法确定为什么 Pandas 没有合并我的两个数据帧。我已经遵循了其他几种解决方案,但仍然没有得到预期的输出。

我的主数据框 df 包含篮球运动员数据,并且非常大,有 10000 多行。以下是 df 的片段:

    Date           Team  
    12/10/2020      BOS
    12/10/2020      ATL
    12/10/2020      PHI
    12/11/2020      BOS
    12/11/2020      ATL
    12/11/2020      PHI

我的第二个数据框 ps 小得多,只有 1000 行并且包含团队信息:

    Date            Team  Points  H/A
    12/10/2020      ATL   70      1
    12/10/2020      PHI   120     1
    12/10/2020      BOS   100     0
    12/11/2020      BOS   110     0
    12/11/2020      PHI   93      1
    12/11/2020      ATL   104     0

匹配 dfdfps 的预期输出:

    Date            Team  Points  H/A
    12/10/2020      BOS   100     0
    12/10/2020      ATL   70      1
    12/10/2020      PHI   120     1
    12/11/2020      BOS   110     0
    12/11/2020      ATL   104     0
    12/11/2020      PHI   93      1

我的尝试: pd.merge(df,ps, on=['Team','Date'])
我认为 df = pd.merge(df,ps, on=['Team','Date']) 与上述相同,只是再次分配 df

当我执行上述任一操作并将 df 保存到 CSV 时,ps 标题和数据不会出现在 df 中的任何位置。我想将 psdf 合并,匹配“Date”和“Team”,以便 df 中的每个玩家都有来自 ps 列“Points”的相应值"和"H/A"。我应该注意,如果这有区别的话,这两个数据集中的日期都不是按时间顺序排列的。

1 个答案:

答案 0 :(得分:1)

这对我有用:

import pandas as pd

df = pd.DataFrame({'Date': ['12/10/2020']*3 + ['12/11/2020']*3,
                   'Team': ['BOS', 'ATL', 'PHI', 'BOS', 'ATL', 'PHI']})


ps = pd.DataFrame({'Date': ['12/10/2020']*3 + ['12/11/2020']*3,
                   'Team': ['ATL', 'PHI', 'BOS', 'BOS', 'PHI', 'ATL'],
                   'Points': [70, 120, 100, 110, 93, 104],
                   'H/A': [1, 1, 0, 0, 1, 0]})

df = pd.merge(df,ps, on=['Team','Date'])

print(df)

输出:

         Date Team  Points  H/A
0  12/10/2020  BOS     100    0
1  12/10/2020  ATL      70    1
2  12/10/2020  PHI     120    1
3  12/11/2020  BOS     110    0
4  12/11/2020  ATL     104    0
5  12/11/2020  PHI      93    1