2016-10-06 77 views
0

計數我有以下形式的數據幀:車削表數據轉換成列和通過頻率

enter image description here

形狀爲2326 X 1271個

列名稱只是從0-1269序列而行在這個例子中是類似於「蘋果」的類別。內部數據點可以表示任何東西(假設它們代表本例中的商店),我試圖將它們轉換爲列並使數據點成爲類別在「商店」中顯示的次數。從外觀上看,這裏是我試圖讓表:

enter image description here

注意,蘋果在AA顯示了與RR兩次

+0

嘗試樞軸或pivot_table功能 – Boud

回答

1

使用stackcrosstab計算頻率計數一起:

數據:

index= ['Apple', 'Orange', 'Apple', 'Banana', 'Kiwi'] 
data = [['AA', 'DD', 'RR', ''], ['DD', 'PP', '', ''], 
     ['AA', 'RR', 'TT', 'SS'], ['EE', 'NN', '',''], ['NN', 'WW','', '']] 
frame = pd.DataFrame(data, index, columns=np.arange(4)) 
frame 

Image

操作:

df = frame.stack().reset_index(0, name='values') 
df = pd.crosstab(df['level_0'], df['values']).drop('', axis=1).replace(0, '') 
df.index.name=None; df.columns.name=None 
df 

Image

+0

這可能成爲最後的贏家。一個問題,在「.drop(...)」之後發生了什麼?給我一個「不包含在軸」錯誤,當我保持它,但似乎沒有工作沒有整個下降和重命名 –

+0

我認爲你可以省略'.drop('',axis = 1)'完全。它被使用的原因是因爲執行'crosstab'操作後創建了一個額外的列。沒有這個也能正常工作。看看它是否有效,直到交叉表部分。休息是爲了純粹的美學目的。 –

+1

它的確如此。謝謝! –