2015-04-22 57 views
21

Tôi muốn thêm một cột 'D' đến một dataframe như thế này:gấu trúc - thêm cột mới vào dataframe từ điển

U,L 
111,en 
112,en 
112,es 
113,es 
113,ja 
113,zh 
114,es 

dựa trên từ điển sau:

d = {112: 'en', 113: 'es', 114: 'es', 111: 'en'} 

để khung dữ liệu kết quả xuất hiện dưới dạng:

U,L,D 
111,en,en 
112,en,en 
112,es,en 
113,es,es 
113,ja,es 
113,zh,es 
114,es,es 

Cho đến nay tôi đã thử phương pháp pd.join() nhưng tôi không thể figur tìm hiểu cách hoạt động với Từ điển.

Trả lời

42

Gọi map và vượt qua dict, điều này sẽ thực hiện một tra cứu và trả về giá trị liên quan đến cho khóa đó:

In [248]: 

d = {112: 'en', 113: 'es', 114: 'es', 111: 'en'} 
df['D'] = df['U'].map(d) 
df 
Out[248]: 
    U L D 
0 111 en en 
1 112 en en 
2 112 es en 
3 113 es es 
4 113 ja es 
5 113 zh es 
6 114 es es 
+2

Cảm ơn! Đó là ma thuật gấu trúc! –

+0

Khi tôi sử dụng "bản đồ", nó nói rằng nó cần ít nhất hai đối số. Bạn có thể cho tôi biết thông tin nào khác tôi cần cung cấp không? Tôi đang chạy python 2.7.1 – amc

+0

@amc Tôi không thể nhận xét trừ khi bạn đăng mã hoàn chỉnh, tôi có thể đảo ngược kỹ thuật mã sai của bạn từ lỗi – EdChum

6

tôi đã TypeError: 'dict' object is not callable lỗi cho giải pháp EdChum khi tôi cố gắng sử dụng index.map(). .. Và tôi đã không tìm thấy một cách để có được chỉ mục như Series.

Vì vậy, tôi đã tìm thấy giải pháp khác cho vấn đề này bằng cách tạo đối tượng Chuỗi từ đối tượng dict trước tiên.

new_d = pd.Series(d) 

Và sau đó thực hiện pd.join với cột bạn muốn. Điều đó có thể hữu ích.

8

Đây là một cách đơn giản hơn mà nên làm việc tốt quá:

df["D"] = pd.Series(d)

Lưu ý: Các phím dict cần phải được trong chỉ số DataFrame cho việc này.

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