2017-04-04 67 views
-2

我想使用python將項目列表轉換爲方形矩陣格式。 我嘗試了熊貓的pivot_table,但沒有奏效。如何將列表轉置爲方形矩陣

這裏是我的代碼,輸入是一個兩列的csv文件

with open(path_to_file,"r") as f: 
    reader = csv.reader(f,delimiter = ',') 
    data = list(reader) 
    row_count=len(data) 
    print(row_count - 1) 


df = pd.read_csv(path_to_file) 


groups = df.groupby(['transmitter chan', 'receiver chan']) 
max_for_AS = defaultdict(int) 
df = df.assign(ID = [0 + i for i in xrange(len(df))]) 

print(df) 

for g in groups: 
    transmitter, count = g[0][0], len(g[1]) 
    max_for_AS[ transmitter ] = max(max_for_AS[transmitter], count) 

for g in groups: 
    transmitter, receiver, count = g[0][0], g[0][1], len(g[1]) 
    if count == max_for_AS[ transmitter ]: 
    dataFinal = "{} , {} , {}".format(transmitter, receiver, count) 
     print(dataFinal) 

數據:

V1 V2 count 
0 A R  1 
1 Z T  4 
2 E B  9 
3 R O  8 
4 T M  7 
5 Y K  5 
6 B I  6 
7 T Z  2 
8 A O  7 
9 Y B  8 
+2

請張貼您的數據,而不是您的數據圖片。另外,請您嘗試迄今爲止的代碼。 – James

+0

是這些numpy數組嗎?熊貓數據框?你可以發佈你試過的代碼嗎? –

回答

0

我想你需要:

df = pd.read_csv(path_to_file) 
df1 = df.pivot(index='V1',columns='V2',values='count').fillna(0).astype(int) 

df1 = df.set_index(['V1','V2'])['count'].unstack(fill_value=0) 

但如果V1V2重複需要它們聚集:

df1 = df.pivot_table(index='V1',columns='V2',values='count', fill_value=0) 

df1 = df.groupby(['V1','V2'])['count'].mean().unstack(fill_value=0) 
#for change ordering add reindex 
df1 = df1.reindex(index=df.V1.unique(), columns=df.V2.unique()) 
print (df1) 
V2 R T B O M K I Z 
V1       
A 1 0 0 7 0 0 0 0 
Z 0 4 0 0 0 0 0 0 
E 0 0 9 0 0 0 0 0 
R 0 0 0 8 0 0 0 0 
T 0 0 0 0 7 0 0 2 
Y 0 0 8 0 0 5 0 0 
B 0 0 0 0 0 0 6 0 
+0

小建議 - [不要張貼圖片的代碼(或鏈接到他們)](http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-當問什麼時候問) – jezrael

+0

謝謝你的建議。 –

0

由於目前還不清楚你想達到什麼樣的,我會用一個假設來回答這個答案。我想你有一個pandas dataframe。如果這是真的,得到它使用numpy的轉置,您可能需要,

  1. 轉換的dataframe(DF)爲numpy ndarray像這樣:df=df.values
  2. 查找步驟的結果使用numpy.transpose轉置1

編輯:

更好的辦法。您也可以做df.transpose()

+0

謝謝您的建議,我現在就試一試。 –

+0

嘗試'df.transpose' – ngub05