【问题标题】:A clean and efficient way to update cells in pandas DataFrames更新 pandas DataFrames 中单元格的一种干净有效的方法
【发布时间】:2015-03-03 19:42:48
【问题描述】:

我正在寻找一种更简洁的方法来实现以下目标:

我有一个包含某些列的 DataFrame,如果有新信息到达,我想更新这些列。 pandas DataFrame(来自 CSV 文件)中的这个“新信息”可以有或多或少的行,但是,我只对添加感兴趣

原始数据帧

带有新信息的DataFrame

(请注意此处缺少名称“c”以及名称“a”的“状态”变化)

现在,我编写了以下“不方便”的代码来使用新信息更新原始 DataFrame

根据“名称”列更新“状态”列

for idx,row in df_base.iterrows():
    if not df_upd[df_upd['name'] == row['name']].empty:
        df_base.loc[idx, 'status'] = df_upd.loc[df_upd['name'] == row['name'], 'status'].values

它完全实现了我想要的,但它看起来既不美观也不高效,我希望可能有一种更清洁的方式。我尝试了pd.merge 方法,但问题是它会添加新列而不是“更新”该列中的单元格。

pd.merge(left=df_base, right=df_upd, on=['name'], how='left')

我期待您的提示和想法。

【问题讨论】:

  • 如果name 是您想用来“识别”行的列,您可以将其设为索引吗?

标签: python pandas


【解决方案1】:

你可以set_index("name"),然后拨打.update

>>> df_base = df_base.set_index("name")
>>> df_upd = df_upd.set_index("name")
>>> df_base.update(df_upd)
>>> df_base
      status
name        
a          0
b          1
c          0
d          1

更一般地,您可以将索引设置为任何看起来合适的值,更新,然后根据需要重新设置。

【讨论】:

  • 太完美了,谢谢!抱歉,不知道update函数
猜你喜欢
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
  • 2011-11-05
  • 2020-07-02
  • 2010-09-20
  • 1970-01-01
相关资源
最近更新 更多