2016-08-02 5 views
2

'タイプ'が2回以上現れた場合、 '国'セルの内容とそれらの行の '年'セルの新しいデータフレームを作成しようとしています。 ( 'how'列は 'type'列のように動作します:型が似ていれば、同様です)。次のように私のPDのデータフレームが見え同一の値の場合にパンダのデータフレームセルを結合する

、DF:

type country year how 
0 't1' 'UK' '2009' 'S' 
1 't2' 'GER' '2010' 'D' 
2 't2' 'USA' '2011' 'D' 
3 't3' 'AUS' '2012' 'F' 
4 't4' 'CAN' '2013' 'R' 
5 't5' 'SA' '2014' 'L' 
6 't5' 'RU' '2015' 'L' 

DF2は、次のようになります。

type country  year   how 
0 't1' 'UK'   '2009'  'S' 
1 't2' 'GER, USA' '2010, 2011' 'D' 
2 't3' 'AUS'  '2012'  'F' 
3 't4' 'CAN'  '2013'  'R' 
4 't5' 'SA, RU'  '2014, 2015' 'L' 

私は 'タイプ'(またはタイプとどのようにして、グループかなり確信しています) 必要です。例えば、first()を使うと、類似した型の行の2番目のものが削除されます。代わりにセル(文字列)を結合する便利な方法はありますか?前もって感謝します。

答えて

3

アグリゲータとして', '.joinで使用groupby/agg

import pandas as pd 
df = pd.DataFrame({'country': ['UK', 'GER', 'USA', 'AUS', 'CAN', 'SA', 'RU'], 
'how': ['S', 'D', 'D', 'F', 'R', 'L', 'L'], 
'type': ['t1', 't2', 't2', 't3', 't4', 't5', 't5'], 
'year': ['2009', '2010', '2011', '2012', '2013', '2014', '2015']}) 

result = df.groupby(['type','how']).agg(', '.join).reset_index() 

利回り

type how country  year 
0 t1 S  UK  2009 
1 t2 D GER, USA 2010, 2011 
2 t3 F  AUS  2012 
3 t4 R  CAN  2013 
4 t5 L SA, RU 2014, 2015 
0

文字列

def proc_df(df): 
    df = df[['country', 'year']] 
    return pd.Series(df.T.values.tolist(), df.columns) 

df.groupby(['how', 'type']).apply(proc_df) 

enter image description here

とは対照的に、各セルにリストを取得するには
関連する問題