如何在Python-dfply上的startswith()中使用条件语句?

时间:2018-08-13 12:45:36

标签: python pandas apply mutate dfply

我正在使用dfply软件包在Python上处理数据。

我想从数据集data_a的“ FC06”创建一个新变量“ a06”,以便:

  • 如果FC06 [i]以字符“ 1”开头(例如:FC06 [i] = 173),a06 = 1
  • a06 = 2,如果FC06 [i]以字符“ 2”开头
  • a06 = NaN(如果FC06 [i] = NaN

例如,输入:

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上执行此操作的另一个软件包?

谢谢!!

1 个答案:

答案 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 )而引起的。一般来说,这应该不成问题。