如何通过合并索引向数据帧添加列?

时间:2021-04-04 08:42:41

标签: python-3.x pandas dataframe

我对 Pandas 很陌生,考虑到新列有自己的索引,我正在尝试向数据框中添加一列。

例如,让我们考虑以下数据:

kp = np.array([0.0, 1.0, 2.0, 3.0, 4.0])
val = np.array([0.1, 0.2, 0.3, 0.4, 0.5])
df = pd.DataFrame({"test":val}, index=kp)

现在,考虑到新索引可能与 df 中使用的索引不同,我想在此数据框中添加一个新列:

kp2 = np.array([0.5, 1.5, 2.5, 3.5, 4.0])
val2 = np.array([0.6, 0.7, 0.8, 0.9, 0.10])

我想要的: Resulting dataframe

enter image description here

kp2 和 val2 的长度相同,kp 和 val 的长度相同,但是 kp 和 kp2 的长度可能不同,当然还有不同的索引。我对 kp 使用了索引,因为我希望索引是唯一的,因此在添加新列时合并索引。如果有更好的解决方案,请随时提出。 感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

import pandas as pd
import numpy as np

#your data:
kp = np.array([0.0, 1.0, 2.0, 3.0, 4.0])
val = np.array([0.1, 0.2, 0.3, 0.4, 0.5])
kp2 = np.array([0.5, 1.5, 2.5, 3.5, 4.0])
val2 = np.array([0.6, 0.7, 0.8, 0.9, 0.10])
df = pd.DataFrame({"test":val}, index=kp)
df2 = pd.DataFrame({"test2":val2}, index=kp2) 

您只需使用 concat() 方法即可:

result=pd.concat((df,df2),axis=1)

最后使用sort_index()方法:

result=result.sort_index()

您可以通过以下方式在 1 行中执行此操作:

result=pd.concat((df,df2),axis=1).sort_index()

#Output of result:
    
    
       test     test2
0.0     0.1     NaN
0.5     NaN     0.6
1.0     0.2     NaN
1.5     NaN     0.7
2.0     0.3     NaN
2.5     NaN     0.8
3.0     0.4     NaN
3.5     NaN     0.9
4.0     0.5     0.1

答案 1 :(得分:1)

您正在寻找熊猫合并方法。

像您之前创建的那样创建一个新的数据框。

df2 = pd.DataFrame({"test2":val2}, index=kp2)

使用数据帧合并命令合并它们:

ddf = df.merge(df2,how='outer',left_index=True,right_index=True,sort=True)
ddf

how='outer' 将帮助您合并 2 个数据帧,其方式类似于 SQL 的 FULL OUTER JOIN。有关其他选项/参数,请查看文档。pandas merge docs