次のリンクには、PythonディクショナリPythonを使用して解決された非常によく似た問題があります。ディクショナリを値としてリスト内のリストとマージし、それらをカウントします。
pythonpandasライブラリを使用して次の問題を解決できるかどうかを知りたいです。マージと結合を使用してみましたが、目的の結果を得る方法がわかりません。
問題は次のとおりです。
2つのcsvファイルから辞書を読みます
dict1 = {'M1': {'H': '1', 'J' : '2'}, 'M2': {'H': '1', 'J' : '2'}, 'M3': {'H': '1', 'J' : '2'}}
dict2 = {'M1': {'H': '4', 'J' : '6'}, 'M2': {'H': '2', 'J' : '5'}, 'M4': {'H': '9', 'J' : '8'}}
必要な出力テーブル:
2つのディクショナリ間で一致するキーのサブディクショナリ[{H、J}]値の合計を含む、両方のディクショナリ内のすべてのキーのリスト
例:M1はdict1とdict2の両方に存在するため、M1の最終出力は次のようになります。
final_M1 ['H'] = 1(dict1 ['M1']から)+ 4(dict2 ['M1']から)= 5
同様に、M3の場合、M3はdict1にのみ存在するため、何もする必要はなく、その値を保持する必要があります。
サンプル出力:
---------------------
M | H | J
---------------------
M1 | 5 | 8
---------------------
M2 | 3 | 7
---------------------
M3 | 1 | 2
---------------------
M4 | 9 | 8
2つの辞書のユニークなセットを取得するには、
keys = set(dict1.keys()).union(dict2.keys())
上記のリンクで使用されているロジックと同様に、Pythonディクショナリを使用したソリューションは次のようになります。
for k in keys:
print "Key:", k
d1val = dict1.get(k, {})
d2val = dict2.get(k, {})
if (len(d1val) == 0):
print "d2val H:", d2val['H']
if (len(d2val) == 0):
print "d1val H:", d1val['H']
if (len(d1val) != 0 and len(d2val) != 0):
print "Test"
print "d1val H:", d1val['H']
print "d2val H:", d2val['H']
print "d1val H + d2val H = ", int(d1val['H']) + int(d2val['H'])
print "***********"
Pythonパンダに同じロジックを実装する方法は?また、入力データセットがファイルあたり10,000行の範囲であるかどうかを考慮すると、このような操作にpandasライブラリを使用することが効率的であるかどうかも確認したいと思います。