【问题标题】:How to update column with multiple conditions taking a corresponding value from another column Python Pandas如何更新具有多个条件的列,从另一列 Python Pandas 获取相应的值
【发布时间】:2018-03-30 04:32:41
【问题描述】:

输出更像是下面的 SQL 语句。

   UPDATE table_A SET final=(cs+fhfa+sz)/3 WHERE cs IS NOT NULL AND fhfa IS NOT NULL AND sz IS NOT NULL;

这里的 cs+fhfa+sz 都是 sql 表(和数据框)中的所有单独的列

如果我想把这条SQL语句转换成python中的pandas操作,这更像是:

   df['div_3'] = (df.cs+df.fhfa+df.sz) /3
   df['final'] = df.loc[(df['cs'] != None) & (df['fhfa'] != None) & (df['sz'] != None) ] = df['div_3']

但这并不能保证最终放置“相应的值”。如何做到这一点??

我真的需要创建另一列 div_3 与所有 3 列的总和?这可以在不创建另一个列的情况下完成吗?

【问题讨论】:

    标签: python sql pandas dataframe


    【解决方案1】:

    过滤pd.Series.notnull 并调用mean

    c = ['cs', 'fhfa', 'sz']
    df['final'] = df[df[c].notnull().all(1)][c].mean(1)
    

    【讨论】:

      【解决方案2】:

      IIUC:

      df.loc[:, 'final'] = df.loc[df[['cs','fhfa','sz']].notnull().all(1), ['cs','fhfa','sz']].sum(1)/3
      

      .all(1) - 与.all(axis=1) 相同,这意味着 - 每个 中的所有值都必须是True

      【讨论】:

      • 我认为这是卑鄙的。
      • @cᴏʟᴅsᴘᴇᴇᴅ,是的,我现在注意到了。但如果我会使用它 - 它与你的答案太相似了...... ;-)
      • 啊哈,没问题。你找到了另一种方法,但仍然像往常一样找到了答案。
      • 希望我能接受这两个答案:)。谢谢大家,但请解释一下 all(1) ,括号 1 是什么意思
      • @Viv,我个人,更喜欢 cᴏʟᴅsᴘᴇᴇᴅ 的回答 ;-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 2022-01-05
      • 2023-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多