[英]Pandas correlation matrix to dictionary of unique index/column combinations
[英]How to efficiently create a matrix of index and column names combinations in python/pandas
我想創建一個數據框/矩陣,其中每個條目都是相應索引和列名的串聯。 我可以用嵌套的 for 循環來做到這一點[見下文],但想知道是否有更好/更快的方法來做到這一點?
我的問題部分來自於不知道如何正確表達我正在嘗試做的事情。 我認為它就像矩陣乘法,但使用字符串和連接而不是乘法。 [因此,也歡迎任何關於如何更好地表達這個問題的評論]
我發現 itertools 有一個product() function可以做一些我想要的但創建一個生成器而不是返回一個矩陣/數據幀。
[動機; 在生物學中,我們有 96 孔板用於樣品儲存等。它們有 1-12 列和 AH 行。 一些機器返回井代碼(A3、G12 等)。 我想在板和實驗輸出之間生成 map 的代碼。]
import pandas as pd
rows = [x for x in "ABCDEFGH"]
columns = [str(x) for x in range(1, 13)]
wells = pd.DataFrame(columns=columns, index=rows)
for i in rows:
for j in columns:
wells.loc[i, j] = "".join([i, j])
>wells
Out[37]:
1 2 3 4 5 6 7 8 9 10 11 12
A A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12
B B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12
C C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12
D D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12
E E1 E2 E3 E4 E5 E6 E7 E8 E9 E10 E11 E12
F F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12
G G1 G2 G3 G4 G5 G6 G7 G8 G9 G10 G11 G12
H H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12
您可以為此使用np.char.add()
和廣播:
rows = [x for x in "ABCDEFGH"]
columns = [str(x) for x in range(1, 13)]
data = np.char.add(np.array(rows)[:, None], np.array(columns)[None, :])
wells = pd.DataFrame(data=data, columns=columns, index=rows)
# 1 2 3 4 5 6 7 8 9 10 11 12
# A A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12
# B B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12
# C C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12
# D D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12
# E E1 E2 E3 E4 E5 E6 E7 E8 E9 E10 E11 E12
# F F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12
# G G1 G2 G3 G4 G5 G6 G7 G8 G9 G10 G11 G12
# H H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12
為什么不用純 python
wells = pd.DataFrame([[r+c for c in columns] for r in rows], columns=columns, index=rows)
您可以將 itertools 產品與 numpy 結合使用:
from itertools import product
frame = map("".join, product(rows, columns))
frame = np.fromiter(frame, dtype='U4')
frame = frame.reshape(len(rows), -1)
frame = pd.DataFrame(frame, index = rows, columns = columns)
frame
1 2 3 4 5 6 7 8 9 10 11 12
A A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12
B B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12
C C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12
D D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12
E E1 E2 E3 E4 E5 E6 E7 E8 E9 E10 E11 E12
F F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12
G G1 G2 G3 G4 G5 G6 G7 G8 G9 G10 G11 G12
H H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.