2013-04-11 29 views
11

Tôi có một dataframe gấu trúc trông như thế này:Làm thế nào để lặp lại hàng trong gấu trúc, dựa trên các mục trong một danh sách

COL  data 
line1 [A,B,C] 

nơi các mục trong cột dữ liệu có thể hoặc là một danh sách hay chỉ là dấu phẩy tách yếu tố . Có một dễ của cách để nhận được:

COL  data 
line1 A 
line1 B 
line1 C 

tôi có thể lặp trên danh sách và tự lặp lại trong các hàng qua trăn, nhưng có một số diệu gấu trúc lừa để làm điều này? Điểm mấu chốt là cách tự động sao chép các hàng.

Cảm ơn!

Trả lời

6

Bạn có thể viết một hàm làm sạch đơn giản để làm cho nó một danh sách (giả sử nó không phải là một danh sách các dấu phẩy, và bạn không thể chỉ cần sử dụng ast.literal_eval):

def clean_string_to_list(s): 
    return [c for c in s if c not in '[,]'] # you might need to catch errors 

df['data'] = df['data'].apply(clean_string_to_list) 

lặp qua các hàng có vẻ như hợp lý lựa chọn:

In [11]: pd.DataFrame([(row['COL'], d) 
         for d in row['data'] 
         for _, row in df.iterrows()], 
         columns=df.columns) 
Out[11]: 
    COL data 
0 line1 A 
1 line1 B 
2 line1 C 

Tôi e rằng mình không nghĩ gấu trúc đặc biệt dành cho loại thao tác này.

+0

"Hàng" và "hàng ['COL']" đến từ đâu? –

+0

@AlexanderSupertramp bên trong danh sách hiểu 'cho _, hàng trong df.iterrows()'. _ Là chỉ số của hàng, hàng là hàng df như một Series. –

+4

Điều này không phù hợp với tôi như đã viết; Tôi cần chuyển đổi hai 'for'statements:' [(hàng ['COL'], d) cho _, hàng trong df.iterrows() cho d trong hàng ['dữ liệu']] '. – RafG

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