python - 将新行添加到 Pandas 数据框

标签 python python-2.7 pandas

我有两个数据帧 df1df2 是从同一来源计算的,但使用不同的方法,因此大多数值相同,但有一些差异。现在,我想根据 df2 中的值更新 df1

例如:

df1 = pd.DataFrame({'name':['john','deb','john','deb'], 'col1':[490,500,425,678], 'col2':[456,625,578,789],'col3':['TN','OK','OK','NY']})
 name col1 col2 col3
 john  490  456  TN
 deb   500  625  OK
 john  425  578  OK
 deb   678  789  NY

df2 = pd.DataFrame({'name':['deb','john','deb','john','deb'], 'col1':[400,490,500,425,678], 'col2':[225,456,625,578,789],'col3':['TN','TN','OK','OK','NY']})
 name col1 col2 col3
  deb  400  225  TN
 john  490  456  TN
  deb  500  625  OK
 john  425  578  OK
 deb   678  789  NY

因此,在这种情况下,.append 应该仅将第一行从 df2 附加到 df1。因此,只有当 df2 中有一个新行在 df1 中不存在时(基于名称和 col3),才会添加该列/已更新,否则不会。

这几乎像是 concat 应该做的事情。

最佳答案

有两种方法可以达到你的结果。

  1. 连接两个数据框,然后删除重复项
  2. 使用外部连接/合并,然后删除重复项

我会告诉你们两个。

连接然后丢弃

这应该对 CPU 更友好

df3 = pd.concat([df1,df2])
df3.drop_duplicates(subset=['name', 'col3'], inplace=True, keep='last')

此方法可能比外部连接占用更多内存,因为在某一时刻您持有 df1df2 以及 [ df1, df2] (df3) 在内存中。

外连接然后删除

这应该对内存更友好

df3 = df1.merge(df2, on=list(df1), how='outer')
df3.drop_duplicates(subset=['name', 'col3'], inplace=True, keep='last')

执行 outer 连接将确保您从两个数据帧中获取所有条目,但是 df3 将小于我们使用 concat.

版本 0.15 及更早的注意事项:

关键字 keep='last' 曾经是 take_last=True

关于python - 将新行添加到 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22648591/

相关文章:

python 网络爬行

python - 在 QT 样式表中使用相对 url

javascript - 如何从获取响应中获取gif

python - Pandas 按位比较在使用多个条件时抛出异常

python - 如何获得连续元素频率的排名?

python - 如何在 Python 中获得完整的异常?

Python 2 绑定(bind) Net-SNMP 错误 - undefined symbol : netsnmp-memdup

python - Python 中的多处理来处理参数列表

python - 正则表达式\b 字边界不适用于 "!"

json - 将 Pandas Dataframe 转储到多个 json 文件