1
私はヴィンテージデータベースに格納されている非常に大きなデータセットを持っています。私はそれらを人間が読める形式(YAMLまたはJSON)に展開したいと思います。ここでの主な目標は、類似のエントリをグループ化することによって冗長性を避けることです。Pandasを使用して同様のエントリをグループ化してマージする
私のデータは次のように要約することができます。目標は、カラムa
とb
によってグループにある
raw = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
{'a': 1, 'b': 3, 'c': 3, 'd': 4},
{'a': 1, 'b': 4, 'c': 6, 'd': 4},
{'a': 2, 'b': 2, 'c': 9, 'd': 9},
{'a': 2, 'b': 3, 'c': 3, 'd': 4}]
、その後、一緒に類似したエントリを組み合わせる:キー2
と3
がある
data = {
1: {
'2,3': {c:3, d:4},
4: {c:3, d:4}
},
2: {
2: {c:9, d:4},
3: {c:3, d:4}
},
}
お知らせコンマで結合されています。
結局、私の出力ファイルは、次のようになります。
%YAML 1.2
---
1:
2,3:
c: 3
d: 4
4:
c: 6
d: 4
2:
2:
c: 9
d: 4
3:
c: 3
d: 4
処理を行うと、パンダを使用してdata
辞書を取得するのは簡単でしょうか?私は次のようにそれを使用します一日の終わりに
:
data = fetch_data(sql_query, groupby=('a', 'b'), group_similar='c')
私は完全に理解するには時間が必要になりますそれ。これは素晴らしいコードです。つまり、フィールド「c」または「d」が空の*つまり「None」のときは機能しません。その場合、 'df.set_index(k).groupby(list(df.columns.drop(k)))'は反復しません。 – nowox
です。サンプルデータに含まれていない他の条件がありますか? Btw、 'drop(k)'は 'axis = 1'を必要とし、' columns'は '.drop()'の後に来るべきだと思います。 – Stefan
サンプルデータはスカラー型 'str'、' numeric'、 'boolean'を混在させることができます。キーは数字または文字列のいずれかです。私は条件のすべてだと思う。 – nowox