2015-07-20 46 views
31

Tôi có một DataFrame đơn giản như sau:Pandas DataFrame: thay thế tất cả các giá trị trong một cột, dựa trên điều kiện

Pandas DataFrame

Tôi muốn chọn tất cả các giá trị từ cột 'Mùa đầu tiên' và thay thế những đó là hơn 1990 bởi 1. Trong ví dụ này, chỉ có Baltimore Ravens sẽ có 1996 thay thế bằng 1 (giữ phần còn lại của dữ liệu còn nguyên vẹn).

Tôi đã sử dụng như sau:

df.loc[(df['First Season'] > 1990)] = 1 

Tuy nhiên, nó thay thế tất cả các giá trị trong hàng đó bằng 1, và không chỉ các giá trị trong cột 'Mùa đầu tiên'.

Làm cách nào tôi có thể thay thế chỉ các giá trị từ cột đó?

Trả lời

55

Bạn cần phải chọn cột rằng:

In [41]: 
df.loc[df['First Season'] > 1990, 'First Season'] = 1 
df 

Out[41]: 
       Team First Season Total Games 
0  Dallas Cowboys   1960   894 
1  Chicago Bears   1920   1357 
2 Green Bay Packers   1921   1339 
3  Miami Dolphins   1966   792 
4 Baltimore Ravens    1   326 
5 San Franciso 49ers   1950   1003 

Vì vậy, cú pháp ở đây là:

df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ] 

Bạn có thể kiểm tra docs và cũng là 10 minutes to pandas trong đó cho thấy các ngữ nghĩa

EDIT

Nếu bạn muốn tạo ra một chỉ số boolean sau đó bạn chỉ có thể sử dụng các điều kiện boolean để tạo ra một dòng boolean và cast dtype để int này sẽ chuyển đổi TrueFalse-10 tương ứng:

In [43]: 
df['First Season'] = (df['First Season'] > 1990).astype(int) 
df 

Out[43]: 
       Team First Season Total Games 
0  Dallas Cowboys    0   894 
1  Chicago Bears    0   1357 
2 Green Bay Packers    0   1339 
3  Miami Dolphins    0   792 
4 Baltimore Ravens    1   326 
5 San Franciso 49ers    0   1003 
+0

Làm việc tuyệt vời! Không phải là có thể áp đặt nhiều biến đổi? 'df.loc [df ['Mùa đầu tiên']> 1990, 'Mùa đầu tiên'] = 1 df.loc [df ['Mùa đầu tiên'] <1990, 'Phần đầu tiên'] = 0' làm cho tất cả các giá trị trong cột đó trả về 0 – ichimok

+0

Bạn có thể sử dụng một thủ thuật 'df ['Mùa đầu tiên'] = (df ['Mùa đầu tiên']> 1990) .astype (int)' này tạo ra một chuỗi boolean và truyền thành int chuyển đổi 'True' và 'Sai' thành' 1' và '0' tương ứng – EdChum

+0

astype (int) là đáng yêu hơn! Câu trả lời tốt. – mythicalcoder

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