Pandas新增一列并按条件赋值

谢邀,这个比较简单,你的想法是对的。
一行代码解决问题
data.apply(lambda x: x.amount if x.list!="" else 0, axis=1)Pandas新增一列并按条件赋值


■网友
pandas很灵活,实现的方式有很多。参考了 @杨航锋 和 @张翼轸 的回答,请允许我整理汇总一下,方便其他读者参考和对比
import pandas as pdimport numpy as npif __name__ == \u0026#39;__main__\u0026#39;: data = https://www.zhihu.com/api/v4/questions/277824046/{/u0026#39;amount/u0026#39;: , /u0026#39;name/u0026#39;: } df = pd.DataFrame(data) # 杨航锋的方法 df = df.apply(lambda x: x.amount if x.name !="" else 0, axis=1) # 张翼轸的方法 df = np.where(df == \u0026#39;\u0026#39;, 0, df) df = df.where(df != \u0026#39;\u0026#39;, 0) df = df df.loc == \u0026#39;\u0026#39;, \u0026#39;x4\u0026#39;] = 0 def multiple_columns(row): out = {} out = row * 2 out = not row return pd.Series(out) df] = df.apply(multiple_columns, axis=1) print(df)输出如下:
Pandas新增一列并按条件赋值

【Pandas新增一列并按条件赋值】 这几种方法的效果都一样。最常用的也最灵活的还是df.apply方法。
apply很灵活。可以对行操作,也可以对列操。在对每行操作时,除了输出一个新的列,还可以一次输出多列。如上的代码里的生成了2列:double_amount和empty_name。
附pandas详细方法讲解
selection by labelwhere 方法 apply
■网友
这类一个条件判断,两种赋值来源的情况,即使在pandas里面,最好的法子也是用numpy里面的where函数,一句话完成,最为简洁。下面的第四行就是完成这个步骤的。

import pandas as pdimport numpy as npdf=pd.DataFrame({\u0026#39;amount\u0026#39;:,\u0026#39;list\u0026#39;:})df=np.where(df==\u0026#39;\u0026#39;,0,df)

■网友
df.loc\u0026gt;0,\u0026#39;C\u0026#39;]=\u0026#39;ff\u0026#39;
用loc也可以实现


    推荐阅读