首页 > 解决方案 > 如何在 pandas DataFrame 中添加 * 或 * 更新列?

问题描述

我有一个现有的 DataFrame,以及一个计算几列以添加到该 DataFrame 的方法。我目前使用pd.concat([left, right], axis=1). 但是,当我第二次调用此方法时,它会再次添加列(具有相同的名称)。

使用以下示例数据框leftright

left = pd.DataFrame({'one': [1, 2, 3], 'two': [2, 3, 4]})
print(left)

   one  two
0    1    2
1    2    3
2    3    4

right = pd.DataFrame({'one': [22, 22, 22], 'NEW': [33, 33, 33]})
print(right)

   one  NEW
0   22   33
1   22   33
2   22   33

我正在寻找一种foo结果如下的方法:

left = left.foo(right)  # or foo(left, right)
print(left)

   one  two  NEW
0   22    2   33
1   22    3   33
2   22    4   33

而且,重要的是,如果我left.foo(right)第二次打电话,我希望结果保持不变。

pd.join当列已存在时引发错误,pd.concat不覆盖现有列,pd.update仅覆盖现有列但不添加新列。

有没有一种功能/方法可以做我想做的事情,还是我必须自己写一个?


解决方案:结合以下两个答案,对我有用的解决方案是:

result = left.\
        drop(left.columns.intersection(right.columns), axis=1).\
        join(right)

标签: pythonpandas

解决方案


采取intersectiondrop列然后mergeindex

left = left.drop(left.columns.intersection(right.columns),1).merge(right, left_index=True, right_index=True)

print(left)
   two  one  NEW
0    2   22   33
1    3   22   33
2    4   22   33

推荐阅读