2014-09-17 18 views

Trả lời

15

Bạn có thể thử này:

import pandas as pd 
df = pd.DataFrame({ 
     'A': [1, 2, 3, 4, 5], 
     'B': ['G', 'X', 'F', 'Z', 'I'] 
    }) 
df.ix[df.B.isin(['X','Y','Z']), 'A'] = 'T' 
print df 

Output:

A B 
0 1 G 
1 T X 
2 3 F 
3 T Z 
4 5 I 

Hãy nhớ sử dụng ix hoặc loc để tránh các giá trị thiết lập trên một lát sao chép.

5

Sử dụng isinloc để thiết lập giá trị:

In [138]: 

df.loc[df.B.isin(['X','Y','Z']),'A']='T' 
df 
Out[138]: 
    A B 
0 1 G 
1 T X 
2 3 F 
3 T Z 
4 5 I 

Bạn cũng có thể sử dụng np.where:

In [140]: 

df['A'] = np.where(df.B.isin(['X','Y','Z']),'T', df['A']) 
df 
Out[140]: 
    A B 
0 1 G 
1 T X 
2 3 F 
3 T Z 
4 5 I 
+0

Tôi nghĩ rằng bạn sử dụng ipython. Bạn có biết sự khác biệt về thời gian giữa chúng không? –

+0

@ user765015 sử dụng loc trên ví dụ đồ chơi này mất 915 chúng tôi, sử dụng nơi mất 615us, vì vậy trong trường hợp này là nhanh hơn 30% – EdChum

+1

@ user765015 cho 50.000 hàng df loc là hơi nhanh hơn 9,27ms so với 11,2 ms – EdChum

Các vấn đề liên quan