输出更类似于以下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列的总和吗?这可以在没有其他列创建的情况下完成吗?
答案 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