如何使用多个条件更新列,并从另一列中获取相应的值Python Pandas
问题描述:
输出更像下面的SQL语句。如何使用多个条件更新列,并从另一列中获取相应的值Python Pandas
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大熊猫操作转换,这将是更喜欢所有单个的列:
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列的总和?这可以做到没有另一列创建?
答
过滤并调用mean
。
c = ['cs', 'fhfa', 'sz']
df['final'] = df[df[c].notnull().all(1)][c].mean(1)
答
IIUC:
df.loc[:, 'final'] = df.loc[df[['cs','fhfa','sz']].notnull().all(1), ['cs','fhfa','sz']].sum(1)/3
.all(1)
- 是相同的.all(axis=1)
,这意味着 -每行中的所有值都必须在pd.Series.notnull
True
我认为这是有意义的。 –
@cᴏʟᴅsᴘᴇᴇᴅ,是的,我现在已经注意到了。但是,如果我会使用它 - 它会太类似于你的答案... ;-) – MaxU
啊哈,没问题。你一如既往地找到了另一条路,并且仍然找到了答案。 –