【问题标题】:How does pandas concat function do column joins without specify common key?pandas concat 函数如何在不指定公共键的情况下进行列连接?
【发布时间】:2018-10-26 00:34:01
【问题描述】:

向我亲爱的 Python 爱好者们问好!

今天,当我在学习有关数据营的 Python 课程时,使用 pd.concat() 进行简单的数据连接真的让我印象深刻。我似乎无法理解加入背后的逻辑。我需要你的帮助!

考虑以下情况,这是一个简化版本,我们想使用 pd.concat() 来连接这两个表:

表 A:

Date        Day        status_country        counts
1/5/2015    289        Cases_Guinea          2776.0
1/4/2015    288        Cases_Guinea          2775.0
1/3/2015    287        Cases_Guinea          2769.0
1/2/2015    286        Cases_Guinea             NaN
12/31/2015  284        Cases_Guinea          2730.0

表 B:

status    country
 Cases     Guinea
 Cases     Guinea
 Cases     Guinea
 Cases     Guinea
 Cases     Guinea

Python 代码:

pd.concat([ebola_melt, status_country], axis = 1)

返回数据:

Date        Day        status_country        counts    status    country
1/5/2015    289        Cases_Guinea          2776.0     Cases     Guinea
1/4/2015    288        Cases_Guinea          2775.0     Cases     Guinea
1/3/2015    287        Cases_Guinea          2769.0     Cases     Guinea
1/2/2015    286        Cases_Guinea             NaN     Cases     Guinea
12/31/2015  284        Cases_Guinea          2730.0     Cases     Guinea

问题:

显然,这两个表之间没有公共索引,除非您解析表 A 中的“status_country”列,然后将其与表 B 匹配,但我不确定这个函数是否足够聪明,可以做到这一点。

这个函数背后有什么样的匹配逻辑?

是做部分匹配还是先解析再匹配?

我怎么理解?

【问题讨论】:

  • 它什么也没做,只是把你的表B添加到表A的右边,因为你指定了axis=1
  • 它是基于索引加入的,你没有包含在问题中。可能这两个DataFrames 有一个简单的RangeIndex(start=0, stop=len(df), step=1)
  • @RockyLi 这解释了!这是一个简单的逐行连接,没有在列值中找到公共索引。最初,我认为 pd.concat() 算法可以识别 "Cases_Guinea" 与 ["Cases", "Guinea"] 之间的匹配项

标签: python pandas join


【解决方案1】:

pd.concat 是基于index

例如你有

df1=pd.DataFrame({'A':[1,2,3,4]})
df2=pd.DataFrame({'A':[1,2,3,4]},index=[2,3,4,5])

当您执行 concat 时,您是按索引执行 join 或按索引执行 merge

pd.concat([df1,df2],axis=1)
Out[303]: 
     A    A
0  1.0  NaN
1  2.0  NaN
2  3.0  1.0
3  4.0  2.0
4  NaN  3.0
5  NaN  4.0

【讨论】:

  • 谢谢温!鉴于它仅基于具有此连接的行索引,如果数据顺序错误,则结果将不正确。这是有道理的。
  • @smzsmzsmz 很高兴我能提供帮助
猜你喜欢
  • 2017-10-27
  • 2018-09-19
  • 2021-12-07
  • 1970-01-01
  • 2020-10-12
  • 2021-12-19
  • 2019-09-06
  • 2013-08-20
相关资源
最近更新 更多