【问题标题】:Joining two Pandas Dataframe加入两个 Pandas 数据框
【发布时间】:2017-11-06 18:49:05
【问题描述】:

请给出两个数据框:

DF1:

A       B                    
a1      b1          
a2      b2          
a3      b3    

DF2:

C1      C2   C3  
 0      0     1  

我想做以下 DF1+DF2 产生以下内容:

    A       B  C1      C2   C3                  
    a1      b1  0      0     1        
    a2      b2  0      0     1
    a3      b3  0      0     1

我不清楚应该如何使用 Merge、Join 或 concatenate 之一。请,任何帮助将不胜感激。c。

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

让我们使用一些解包和前向填充 nas:

DF1.assign(**DF2).ffill()

或者,让我们创建一个伪键来进行笛卡尔连接,然后删除伪键。

DF1.assign(key=1).merge(DF2.assign(key=1), on='key').drop('key',axis=1)

输出:

    A   B   C1   C2   C3
0  a1  b1  0.0  0.0  1.0
1  a2  b2  0.0  0.0  1.0
2  a3  b3  0.0  0.0  1.0

【讨论】:

  • 不要改名字我的朋友...拜托:-)
  • 其实 Scott Boston 解决了这个问题。
【解决方案2】:

pd.concat + ffill

pd.concat([df1,df2],1).ffill()
Out[1188]: 
    A   B   C1   C2   C3
0  a1  b1  0.0  0.0  1.0
1  a2  b2  0.0  0.0  1.0
2  a3  b3  0.0  0.0  1.0

【讨论】:

  • 没有解决问题。它添加了 NaN 值。该解决方案由上面的 Scott Boston 提供。
  • @CarloAllocca .....你有什么问题?所以你在计算过程中不想要任何 NaN 吗?
  • 感谢温的回复。是的,问题是第一行有一些我不想要的额外 NaN 值。
【解决方案3】:

如果df2 只包含一行,我们可以这样做:

In [30]: df1.assign(**df2.iloc[0].to_dict())
Out[30]:
    A   B  C1  C2  C3
0  a1  b1   0   0   1
1  a2  b2   0   0   1
2  a3  b3   0   0   1

【讨论】:

  • 是的...我更喜欢这种方式,这样一排更安全。
猜你喜欢
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-18
相关资源
最近更新 更多