*见下文编辑
我有一个包含6列的数据框架,我正在使用pandas和numpy来编辑和处理数据
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
我想创建另一列,计算每个id出现的“calv”数
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
这是我最后一次尝试:
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
但结果是整个“no_calv”列4.0
我以前试过这样的方法
..
(df["calv1"] != "NaT")
..
及
..
(df["calv1"] != pd.nat)
..
整个列的结果总是4.0,或者只是NaN.
对于新的python用户有什么提示和技巧吗
*编辑: 我得到了一个很好的答案,仅仅是计算总和,但我现在意识到,如果其他值之间缺少值,我还想考虑一个因素(参见第6行):
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
这就是为什么我试图在我的原始示例中非常清楚地说明标准
只要值是datetime(NaT是缺少的值,而不是字符串),您就可以使用:
要获得:
它会检查是否存在未丢失的值,并沿行(轴=1)求和
您可以使用
apply
执行此操作:相关问题 更多 >
编程相关推荐