2017-07-19 17 views
0

これは私が過去のインタビューで持っていた質問です。データフレームの列をグループ化し、パンダで辞書に変換する

私たちは、入力されたデータには、次の列持つがあります

言語、製品ID、棚のID、例えばランク

を、入力は次の形式

English, 742005, 4560, 10.2 
English, 6000075389352, 4560, 49 
French, 899883993, 4560, 32 
French, 731317391, 7868, 81 

を持つことになり、私たちは考え言語、棚IDの列に対して「グループ化」操作を行い、「ランク」属性のソートdescに基づいて製品のリストをソートすると、出力は次の形式になります。

Language、shelf_id、{product_id:rank1、product_id:rank2 ....}

各レコード。所与の入力のため

、出力は以下のようになります。

English, 4560, {6000075389352:49, 742005:10.2} 
French, 4560, 899883993:32 
French, 7868, 731317391:81 

Iは、(言語とシェルフIDを組み合わせることによって作成される)キーで辞書を作成し、製品を挿入することによってこの問題を解決しid、各キーのランク。

私の方法はうまくいきましたが、python pandasライブラリを使って簡単な方法があるようです。私はいくつかの参考文献を読んだことがありますが、私はそれが優れているかどうかはまだ分かりません(言語、棚ID、そのキーを持つ辞書を使用して問題を解決する)

ヘルプ大いに感謝します。

答えて

1

セットアップ:

df = pd.read_csv('file.csv', header=None) 

df.columns = ['Lang', 'product_id', 'shelf_id', 'rank_id']  

     Lang  product_id shelf_id rank_id 
0 English   742005  4560  10.2 
1 English 6000075389352  4560  49.0 
2 French  899883993  4560  32.0 
3 French  731317391  7868  81.0 

あなたはLangshelf_idによってグループにdf.groupbyを使用することができます。その後{productid : rankid}の辞書を取得するためにdf.applyを使用します。答えを

In [613]: df.groupby(['Lang', 'shelf_id'], as_index=False)[['product_id', 'rank_id']]\ 
    ...:   .apply(lambda x: dict(zip(x['product_id'], x['rank_id'])))\ 
    ...:   .reset_index(name='mapping') 
Out[613]: 
     Lang shelf_id        mapping 
0 English  4560 {6000075389352: 49.0, 742005: 10.2} 
1 French  4560     {899883993: 32.0} 
2 French  7868     {731317391: 81.0} 
+0

おかげで、しかし、あなたはまた、あなたがそのようなデータフレームとしてテキスト入力を読んでどのように説明できますか? – user98235

+0

@ user98235セットアップ情報で自分の投稿を編集しました。私は、あなたのデータがcsvファイルにあると仮定しました。 –

+0

@COLDSPEED答えに感謝しますが、あなたが入力として受け取ったファイルであれば教えてください。例えば、私はちょうどそれをタイプすることができます。 – user98235

関連する問題