2016-11-30 198 views
0

我想从Pandas DataFrame中选择一个特定列的值,该值的值以特定文本开头。如果为True,则下一列将使用前一列值的内容进行更新。如何选择熊猫系列值以特定文本开头?

例如,我有一个数据帧df_1,我想和值a2更新是a1as开始。

df_1 = pd.DataFrame({'a1':['amtr1',np.nan,'astr2',np.nan,'gbstr2','mkstr2','gbstr2','astr1'], 
        'a2':[np.nan]*8}) 
df_1 

    a1  a2 
0 amtr1 NaN 
1 NaN  NaN 
2 astr2 NaN 
3 NaN  NaN 
4 gbstr2 NaN 
5 mkstr2 NaN 
6 gbstr2 NaN 
7 astr1 NaN 

我想要这个输出。

a1  a2 
0 amtr1 NaN 
1 NaN  NaN 
2 astr2 astr2 
3 NaN  NaN 
4 gbstr2 NaN 
5 mkmk2 NaN 
6 gbstr2 NaN 
7 astr1 astr1 

回答

2

loc使用用布尔条件使用矢量化str.startswith用Arg 'as'和选择列'a2'并分配柱'a1'值:

In [59]: 
df_1.loc[df_1['a1'].str.startswith('as', na=False), 'a2'] = df_1['a1'] 
df_1 

Out[59]: 
     a1  a2 
0 amtr1 NaN 
1  NaN NaN 
2 astr2 astr2 
3  NaN NaN 
4 gbstr2 NaN 
5 mkstr2 NaN 
6 gbstr2 NaN 
7 astr1 astr1 
+1

另外'(df_1 [ 'A1'] str.startswith( 'as',na = False))'看起来更简洁。 –

+0

@NickilMaveli是的,我忘记了'str'方法中的'NaN'处理,欢呼声将更新 – EdChum

+0

Tks,如果'as'是一个unicode不是str?在我的真实数据中,有一个错误。 'AttributeError:只能使用带字符串值的.str访问器,它在pandas中使用np.object_ dtype。' –