Tôi có một khung dữ liệu trong đó một số ô chứa danh sách nhiều giá trị. Thay vì lưu trữ nhiều giá trị trong một ô, tôi muốn mở rộng khung dữ liệu sao cho mỗi mục trong danh sách nhận được hàng riêng của nó (có cùng giá trị trong tất cả các cột khác). Vì vậy, nếu tôi có:gấu trúc: Khi nội dung ô là danh sách, hãy tạo hàng cho từng phần tử trong danh sách
import pandas as pd
import numpy as np
df = pd.DataFrame(
{'trial_num': [1, 2, 3, 1, 2, 3],
'subject': [1, 1, 1, 2, 2, 2],
'samples': [list(np.random.randn(3).round(2)) for i in range(6)]
}
)
df
Out[10]:
samples subject trial_num
0 [0.57, -0.83, 1.44] 1 1
1 [-0.01, 1.13, 0.36] 1 2
2 [1.18, -1.46, -0.94] 1 3
3 [-0.08, -4.22, -2.05] 2 1
4 [0.72, 0.79, 0.53] 2 2
5 [0.4, -0.32, -0.13] 2 3
Làm thế nào để chuyển đổi sang dạng dài, ví dụ:
subject trial_num sample sample_num
0 1 1 0.57 0
1 1 1 -0.83 1
2 1 1 1.44 2
3 1 2 -0.01 0
4 1 2 1.13 1
5 1 2 0.36 2
6 1 3 1.18 0
# etc.
Chỉ số này không quan trọng, đó là OK để thiết lập cột như chỉ số và thứ tự isn thức hiện 't quan trọng.
Cảm ơn, ngay cả những bước đầu tiên áp dụng để có được mỗi mục trong cột riêng của nó là một trợ giúp rất lớn. Tôi đã có thể đưa ra một cách hơi khác để làm điều đó, nhưng vẫn còn một vài bước công bằng liên quan. Rõ ràng điều này không đơn giản để làm ở Pandas! – Marius
Câu trả lời hay. Bạn có thể rút ngắn nó một chút bằng cách thay thế 'df.apply (lambda x: pd.Series (x ['mẫu']), axis = 1)' bằng 'df.samples.apply (pd.Series)'. –