2017-06-07 27 views
1

我有一個數據幀,看起來是這樣的:變換的非數字的行成列的自定義列名

df = pd.DataFrame([['7690d79f','Pos'],['7690d79f','Neg'],['7690d79f','Pos'],['7690d79f','Neu'],\ 
         ['6690d79f','Pos'],['6690d79f','Neg'],['6690d79f','Pos'],['6690d79f','Neu']]\ 
         ,columns=['id', 'vote']) 

是:

id   vote 
0 7690d79f Pos 
1 7690d79f Neg 
2 7690d79f Pos 
3 7690d79f Neu 
4 6690d79f Pos 
5 6690d79f Neg 
6 6690d79f Pos 
7 6690d79f Neu 

我想樞行,使得列,我得到一個結果DF爲

id vote_1 vote_2 vote_3 vote_4 
7690d79f Pos Neg Pos Neu 
6690d79f Pos Neg Pos Neu 

如果有幫助,每個ID不超過4票。

雖然這是類似於

  1. Python Pandas: Convert Rows as Column headers

  2. Convert row to column in Python Pandas

但不幸的是,他們沒有爲我工作。

回答

2

讓我們試試這個:

df1 = df.groupby('id')['vote'].apply(lambda x: pd.DataFrame(x.tolist())).unstack() 
df1.columns = df1.columns.droplevel().values + 1 
df1.add_prefix('vote_').reset_index() 

輸出:

  id vote_1 vote_2 vote_3 vote_4 
0 6690d79f Pos Neg Pos Neu 
1 7690d79f Pos Neg Pos Neu 
+1

完美的,工作的,現在要google一下'unstack'和'droplevel()' – Watt