2017-10-27 8 views
1

私は、このパンダ:列でグループと新しいデータフレームに数値化、重複する列を追加

Page KeyWord date 
1 hello mon 
1 good mon 
2 holy tues 
2 brown wed 
2 crazy wed 

としてデータフレームを持っている基本的にデータフレームが十分に列を追加する必要があり

Page KeyWord_1 KeyWord_2 KeyWord_3 date_1 date_2 date_3 
1 hello  good  NULL  mon mon NULL 
2 holy  brown  crazy  tues wed wed 

する出力データフレームを必要とします重複するページ番号の最大数を満たすために、ページに3つの重複があったことがわかります(ページ2のインスタンスが3つあります)ので、groupby列以外に多数の重複列も追加する必要があります。

ちょうど別の例

入力表示する:

Page KeyWord date 
1 hello mon 
1 good mon 
2 holy tues 
2 brown wed 

出力:

Page KeyWord_1 KeyWord_2 date_1 date_2 
1 hello  good  mon mon 
2 holy  brown  tues wed  

答えて

1

一つの方法、マルチインデックスに行く:

In [11]: res = df.pivot_table(index="Page", columns=df.groupby("Page").cumcount(), aggfunc="first") 

In [12]: res 
Out[12]: 
    KeyWord    date 
      0  1  2  0 1  2 
Page 
1  hello good None mon mon None 
2  holy brown crazy tues wed wed 
0123を

あなたが本当に必要がある場合は、その後の列をフラット化することができます

# python 3 
In [13]: [f"{title}_{str(i+1)}" for title, i in res.columns] 
Out[13]: ['KeyWord_1', 'KeyWord_2', 'KeyWord_3', 'date_1', 'date_2', 'date_3'] 

# python 2 
In [14]: [title + "_" + str(i+1) for title, i in res.columns] 
Out[14]: ['KeyWord_1', 'KeyWord_2', 'KeyWord_3', 'date_1', 'date_2', 'date_3'] 

In [15]: res.columns = [title + "_" + str(i+1) for title, i in res.columns] 

In [16]: res 
Out[16]: 
    KeyWord_1 KeyWord_2 KeyWord_3 date_1 date_2 date_3 
Page 
1  hello  good  None mon mon None 
2   holy  brown  crazy tues wed wed 
+0

私たちは、1に列を組み合わせることができます - ) – Wen

1
df['new']=df.groupby('Page').cumcount().add(1) 
df=df.set_index(['Page','new']).unstack() 
df.columns=df.columns.map('{0[0]}_{0[1]}'.format) 

Out[870]: 
    KeyWord_1 KeyWord_2 KeyWord_3 date_1 date_2 date_3 
Page             
1  hello  good  None mon mon None 
2   holy  brown  crazy tues wed wed 
0

あなたはこのような達成するためにpivot_table機能を使用することができます。コードの下にあなたのための仕事をするだろう:

import pandas as pd 
df = pd.DataFrame([ 
[1, "hello", "mon"], 
[1, "good", "mon"], 
[2, "holy", "tues"], 
[2, "brown", "wed"], 
[2, "crazy", "wed"]]) 
df.columns = ["Page", "KeyWord", "date"] 

df_out = pd.pivot_table(df, index="Page", values = ["KeyWord","date"], columns = df.groupby(['Page']).cumcount()+1, aggfunc="first") 
df_out.columns = [key + "_" + str(date) for key, date in df_out.columns] 

だからあなたの元DataFrameがある場合:次に

>>> df 
    Page KeyWord date 
0  1 hello mon 
1  1 good mon 
2  2 holy tues 
3  2 brown wed 
4  2 crazy wed 

df_outは次のようになります。

>>> df_out 
    KeyWord_1 KeyWord_2 KeyWord_3 date_1 date_2 date_3 
Page             
1  hello  good  None mon mon None 
2   holy  brown  crazy tues wed wed 
関連する問題