如何使用多个条件更新列,从另一列Python Pandas获取相应的值

时间:2017-10-18 10:16:51

标签: 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表(和数据帧)中的所有单独的列

如果我想在Python中将此SQL语句转换为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列的总和吗?这可以在没有其他列创建的情况下完成吗?

2 个答案:

答案 0 :(得分:3)

过滤pd.Series.notnull并致电mean

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

答案 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