python - 如何在 pandas DataFrame 中添加 * 或 * 更新列?
问题描述
我有一个现有的 DataFrame,以及一个计算几列以添加到该 DataFrame 的方法。我目前使用pd.concat([left, right], axis=1)
. 但是,当我第二次调用此方法时,它会再次添加列(具有相同的名称)。
使用以下示例数据框left
和right
:
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)
解决方案
采取intersection
和drop
列然后merge
:index
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
推荐阅读
- r - Choropleth 世界地图 - 转换 k 个千数
- javascript - 如何在选项卡中显示 woocommerce 产品类别
- discord.js - 仅使用特定角色而不是 dm 评论
- c++ - 创建树或任何其他结构描述代码之间的连接
- flutter - Flutter:“int”类型不是“Function”类型的子类型
- typescript - 检查泛型数组是否包含值
- assembly - 遍历 mips 程序集数组的最简单方法是什么?
- swift - ForEach 中的自定义状态绑定
- python - 如何在 python matplotlib 中添加正确的图例
- python - Power BI(PBIX) - 解析布局文件