问题
我需要测试列中每个数字的第一个数字是否有条件。在
条件
checkVar的第一个数字是否大于5
或
checkVar的第一个数字是否小于2
然后设置newVar=1
解决方案
有一种想法是把一个字符串转换成字符串,左键去掉空格,然后取[0],但我无法计算出代码。在
也许像是
df.ix[df.checkVar.str[0:1].str.contains('1'),'newVar']=1
这不是我想要的,由于某种原因我得到了这个错误
^{pr2}$测试我的原始变量,我得到的值应该符合条件
df.checkVar.value_counts()
301 62
1 15
2 5
999 3
dtype: int64
理想情况下,它看起来像这样:
checkVar newVar
NaN 1 nan
2 nan
3 nan
4 nan
5 301.0
6 301.0
7 301.0
8 301.0
9 301.0
10 301.0
11 301.0
12 301.0
13 301.0
14 1.0 1
15 1.0 1
更新
我的最终解决方案,因为实际问题更复杂
w = df.EligibilityStatusSP3.dropna().astype(str).str[0].astype(int)
v = df.EligibilityStatusSP2.dropna().astype(str).str[0].astype(int)
u = df.EligibilityStatusSP1.dropna().astype(str).str[0].astype(int)
t = df.EligibilityStatus.dropna().astype(str).str[0].astype(int) #get a series of the first digits of non-nan numbers
df['MCelig'] = ((t < 5)|(t == 9)|(u < 5)|(v < 5)|(w < 5)).astype(int)
df.MCelig = df.MCelig.fillna(0)
当你不确定如何进行时,将这些步骤分开一点是有帮助的。在
将“else:return”值更改为您想要的任何值(例如,“else:pass”)。另外,如果要创建新列:
*更新-我之前没有注意到NaNs。我发现即使使用dropna()也有问题。下面这些对你有用吗,就像对我一样?在
^{pr2}$如果是这样的话,可能您的数据中的问题是“old_col”的数据类型?你试过先把它转换成浮点数吗?在
这可能稍微好一点,不确定,但另一个,非常相似的方法来处理它。在
^{pr2}$相关问题 更多 >
编程相关推荐