Python中文
首页
教程
问答
标签
搜索
登录
注册
Python和pandas:如何使用df.loc根据条件创建新列?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>*见下文编辑</p> <p>我有一个包含6列的数据框架,我正在使用pandas和numpy来编辑和处理数据</p> <pre><code>id calv1 calv2 calv3 calv4 1 2006-08-29 2007-08-29 2008-08-29 2009-08-29 2 NaT NaT NaT NaT 3 2006-08-29 NaT NaT NaT 4 2006-08-29 2007-08-29 2010-08-29 NaT 5 2006-08-29 2013-08-29 NaT NaT </code></pre> <p>我想创建另一列,计算每个id出现的“calv”数</p> <pre><code>id calv1 calv2 calv3 calv4 no_calv 1 2006-08-29 2007-08-29 2008-08-29 2009-08-29 4 2 NaT NaT NaT NaT 0 3 2006-08-29 NaT NaT NaT 1 4 2006-08-29 2007-08-29 2010-08-29 NaT 3 5 2006-08-29 2013-08-29 NaT NaT 2 </code></pre> <p>这是我最后一次尝试:</p> <pre><code>nat = np.datetime64('NaT') df.loc[ (df["calv1"] == nat) & (df["calv2"] == nat) & (df["calv3"] == nat) & (df["calv4"] == nat), "no_calv"] = 0 #1 calvings df.loc[ (df["calv1"] != nat) & (df["calv2"] == nat) & (df["calv3"] == nat) & (df["calv4"] == nat), "no_calv"] = 1 #2 calvings df.loc[ (df["calv1"] != nat) & (df["calv2"] != nat) & (df["calv3"] == nat) & (df["calv4"] == nat), "no_calv"] = 2 #3 calvings df.loc[ (df["calv1"] != nat) & (df["calv2"] != nat) & (df["calv3"] != nat) & (df["calv4"] == nat), "no_calv"] = 3 #4 or more calvings df.loc[ (df["calv1"] != nat) & (df["calv2"] != nat) & (df["calv3"] != nat) & (df["calv4"] != nat), "no_calv"] = 4 </code></pre> <p>但结果是整个“no_calv”列<strong>4.0</strong></p> <p>我以前试过这样的方法</p> <pre><code>.. (df["calv1"] != "NaT") .. </code></pre> <p>及</p> <pre><code>.. (df["calv1"] != pd.nat) .. </code></pre> <p>整个列的结果总是<strong>4.0</strong>,或者只是<strong>NaN.</strong></p> <p>对于新的python用户有什么提示和技巧吗</p> <p>*编辑: 我得到了一个很好的答案,仅仅是计算总和,但我现在意识到,如果其他值之间缺少值,我还想考虑一个因素(参见第6行):</p> <pre><code>id calv1 calv2 calv3 calv4 no_calv 1 2006-08-29 2007-08-29 2008-08-29 2009-08-29 4 2 NaT NaT NaT NaT 0 3 2006-08-29 NaT NaT NaT 1 4 2006-08-29 2007-08-29 2010-08-29 NaT 3 5 2006-08-29 2013-08-29 NaT NaT 2 6 2006-08-29 NaT 2013-08-29 2013-08-292 NaN #or some other value </code></pre> <p>这就是为什么我试图在我的原始示例中非常清楚地说明标准</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>您可以使用<code>apply</code>执行此操作:</p> <pre><code> def counting_fun(row): return len(row.dropna()) # what is the cnt of not pd.nat columns df['no_calv'] = df.apply(counting_fun, axis=1) </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
尽管Python中的所有内容都是引用,为什么Python导师在没有指针的列表中绘制字符串和整数?
4 回答
尽管python中的表达式为false,但循环仍在运行
3 回答
尽管python代码正确,但从nifi ExecuteScript处理器获取语法错误
9 回答
尽管Python在Neovim中工作得很好,但插件不能识别Neovim中的Python主机
5 回答
尽管python字典包含了大量的条目,但它并没有增长
5 回答
尽管python说模块存在,为什么我会得到这个消息?
3 回答
尽管setuptools和控制盘是最新的,但无法识别singleversionexternallymanaged
8 回答
尽管stdout和stderr重定向,但未捕获错误消息
1 回答
尽管Tensorboard的事件太大,但Tensorboard的步骤太少了
9 回答
尽管tkinter上的变量已更改,但显示未更改
4 回答
尽管try/except使用Python进行单元测试时出现断言错误
7 回答
尽管URL是sam,但仍会抛出“达到最大重定向”
10 回答
尽管url有效,Pandas仍读取url的\u csv错误
7 回答
尽管while中存在时间延迟,但LINUX线程的CPU利用率为100%(1)
1 回答
尽管x0在范围内,Scipy优化仍会引发ValueError
2 回答
尽管xpath正确,但使用selenium单击链接仍不起作用
3 回答
尽管下载了ffmpeg并设置了路径变量python,但没有后端错误
3 回答
尽管下载了i,但找不到型号“fr”
7 回答
尽管下载了plotnine包,但未获取名为“plotnine”的模块时出错
5 回答
尽管为所有行指定了权重,网格(0)仍不起作用
3 回答