【问题标题】:Merging two dataframes with multiple conditions in Pandas在 Pandas 中合并具有多个条件的两个数据框
【发布时间】:2021-03-04 19:17:33
【问题描述】:

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

我的主要数据框df 包含篮球运动员数据,并且非常大,有 10000 多行。这是df的sn-p:

    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

匹配dfpsdf 的预期输出:

    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 合并,匹配“日期”和“团队”,以便df 中的每个玩家都有来自ps 列“点”和“H/A”的对应值。我应该注意,两个数据集中的日期都不是按时间顺序排列的,如果有区别的话。

【问题讨论】:

  • @chitown88 我很感激这个提议!我的一个数据集的日期是通过df.apply(lambda x: datetime.date(x['Year'], x['Month'], x['Day']), axis=1) 处理的,并且是对象数据类型,而不是我预期的日期时间。确保两个数据集中的日期均为 datetime 类型,从而解决了问题!

标签: python pandas


【解决方案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

【讨论】:

  • 谢谢!至少我知道我走在正确的轨道上......我现在怀疑我的数据框有一些数据类型或其他污染,这会阻止合并正确发生。
猜你喜欢
  • 2021-07-31
  • 2015-03-21
  • 2019-01-21
  • 2020-07-07
  • 1970-01-01
  • 2015-10-17
  • 2018-03-14
  • 1970-01-01
  • 2018-03-15
相关资源
最近更新 更多