2016-11-30 197 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。' –