Python 如何使用从另一列获取相应值的多个条件更新列
输出更像下面的SQL语句Python 如何使用从另一列获取相应值的多个条件更新列,python,sql,pandas,dataframe,Python,Sql,Pandas,Dataframe,输出更像下面的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表(和dataframe)中的所有单独列 如果我想将此SQL语句转换为python中的pandas操作,这将更像: df['div_3'] = (df.cs+df.fhfa+df.sz) /3 df['final']
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表(和dataframe)中的所有单独列
如果我想将此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']
但这并不能保证“对应的值”最终被放入。如何做到这一点
我真的需要用3列的总和创建另一列div_3吗?这可以在不创建其他列的情况下完成吗?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
在pd.Series.notnull
上进行筛选,并调用mean
c = ['cs', 'fhfa', 'sz']
df['final'] = df[df[c].notnull().all(1)][c].mean(1)
我认为这很卑鄙ᴏʟᴅsᴘᴇᴇᴅ, 是的,我现在注意到了。但是如果我用它的话——它会和你的答案太相似了……;-)啊哈,没问题。你找到了另一种方法,仍然像往常一样找到了答案。希望我能接受这两个答案:)。谢谢大家,但请解释所有(1),括号1是什么means@Viv就我个人而言,就像cᴏʟᴅsᴘᴇᴇᴅ'让我们回答更多;-)