Pandas列绑定(cbind)两个数据帧

bre*_*mri 42 python pandas

我有一个df_a带有id信息的数据框:

    unique_id lacet_number 
15    5570613  TLA-0138365 
24    5025490  EMP-0138757 
36    4354431  DXN-0025343 
Run Code Online (Sandbox Code Playgroud)

和另一个数据帧df_b,我知道的行数对应于以下行df_a:

     latitude  longitude 
0  -93.193560  31.217029  
1  -93.948082  35.360874  
2 -103.131508  37.787609  
Run Code Online (Sandbox Code Playgroud)

我想要做的只是简单地解决这两个问题并得到:

    unique_id lacet_number      latitude  longitude 
0     5570613  TLA-0138365    -93.193560  31.217029  
1     5025490  EMP-0138757    -93.948082  35.360874  
2     4354431  DXN-0025343   -103.131508  37.787609  
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

df_c = pd.concat([df_a, df_b], axis=1)
Run Code Online (Sandbox Code Playgroud)

这给了我一个外连接.

    unique_id lacet_number    latitude  longitude
0         NaN          NaN  -93.193560  31.217029
1         NaN          NaN  -93.948082  35.360874
2         NaN          NaN -103.131508  37.787609
15    5570613  TLA-0138365         NaN        NaN
24    5025490  EMP-0138757         NaN        NaN
36    4354431  DXN-0025343         NaN        NaN
Run Code Online (Sandbox Code Playgroud)

问题是两个数据帧的索引不匹配.我阅读了pandas.concat的文档,看到有一个选项"ignore_index".但这仅适用于连接轴,在我的情况下,列和它当然不适合我.所以我的问题是:有没有一种简单的方法来实现这一目标?

EdC*_*ica 68

如果你确定索引行值是相同的那么为了避免索引对齐顺序然后只是调用reset_index(),这将重置你的索引值从0以下开始:

df_c = pd.concat([df_a.reset_index(drop=True), df_b], axis=1)
Run Code Online (Sandbox Code Playgroud)


tdy*_*tdy 5

DataFrame.join

虽然concat很好,但更简单join

C = A.join(B)
Run Code Online (Sandbox Code Playgroud)

这仍然假设索引对齐,因此reset_index根据需要。在OP的例子中,B的索引已经是默认的,所以我们只需要重置A

C = A.reset_index(drop=True).join(B)

#    unique_id  lacet_number     latitude  longitude
# 0    5570613   TLA-0138365   -93.193560  31.217029
# 1    5025490   EMP-0138757   -93.948082  35.360874
# 2    4354431   DXN-0025343  -103.131508  37.787609
Run Code Online (Sandbox Code Playgroud)