我正在使用dfply软件包在Python上处理数据。
我想从数据集data_a的“ FC06”创建一个新变量“ a06”,以便:
例如,输入:
df = pd.DataFrame({'FC06':[173,170,220,float('nan'),110,230,float('nan')]})
我想获取输出:
df1= pd.DataFrame({'a06':[1,1,2,float('nan'),1,2,float('nan')]})
在R上,可以通过以下方式获得:
data_a %>% mutate(a06 = ifelse(substr(FC06,1,1)=="1",1,ifelse(substr(FC06,1,1)=="1",2,NaN)))
但是我找不到如何使用Python做到这一点。
我实现了只有两个替代方案的第一个版本:NaN或1,具有:
data_a >> mutate(a06=if_else((X['FC06'].apply(pd.isnull)),float('nan'),1)
但是我找不到如何根据FC06的第一个字符来区分结果。
(我尝试过类似的操作:
(data_a >> mutate(a06=if_else(X['FC06'].apply(pd.isnull),float('nan'),if_else(X['FC06'].apply(str)[0]=='1',1,2))))
但没有成功: -[0]不能在那里获得第一个字符 -和/或str()不能与apply一起使用(都不是str.startswith('1'))
有人知道如何解决这种情况吗?
还是要在Python上执行此操作的另一个软件包?
谢谢!!
答案 0 :(得分:0)
如果只有3位数字,则可以使用楼层分隔:
ViewBox
如果您有字符串,则可以使用<ViewBox Width="" Height="">
<RatingControl .../>
</ViewBox>
:
df['FC06'] //= 100
您将注意到您的整数变为浮点数。这是由于存在pd.Series.mask
个值(被认为是ints = pd.to_numeric(df['FC06'].astype(str).str[:1], errors='coerce')
df['FC06'].mask(df['FC06'].notnull(), ints, inplace=True)
print(df)
FC06
0 1.0
1 1.0
2 2.0
3 NaN
4 1.0
5 2.0
6 NaN
)而引起的。一般来说,这应该不成问题。