pythonを使って、2つのDataFrameのマッチングを行っています。
単に共通の値を基にマージするのではなく、値が近い組み合わせによってマージしたいです。
昨日投稿したところpandas.merge_asofを教えていただきましたが、一意にマージされず困っています。
例えば
df1 # name a # 0 A 1 # 1 B 5 # 2 C 5 # 3 D 8 # 4 E 9 df2 # table a # 0 2 2 # 1 3-1 3 # 2 3-2 3 # 3 7 7
に対して、merge_asofを使うと
pd.merge_asof(df1, df2, on='a', direction='nearest') """ a name table 0 1 a 2 1 5 b 3-2 2 5 c 3-2 3 8 d 7 4 9 e 7 """
と、同じ行が複数回結合されてしまいます。右側から同じ行が結合されないような、
# a name table #0 1 a 2 #1 5 b 3-1 #2 5 c 3-2 #3 8 d 7 #4 9 e NaN
となるような組み合わせを効率よく導くにはどうしたらよいでしょうか。
いろいろ調べたのですが力及ばず…。ご教授ください。
昨日の投稿:2つのリストから最も近い数値の組み合わせを作りたい
https://teratail.com/questions/186877?nli=5cc5ee12-68c4-462b-b86e-47f40a28001e
#追記:補足
df1の値ごとに最近値を取りたいので、例えば、
python
1df1 = pd.DataFrame({'name': ['A','B','C','D','D-2','E'],'a':[1,5,5,5,8,9]}) 2df2 = pd.DataFrame({'table': ['2','3-1','3-2','7'],'a':[2,3,3,7]})
のときに、
""" name a table 0 A 1 2 1 B 5 3-1 2 C 5 3-2 3 D 5 7 4 D-2 8 NaN 5 E 9 NaN """
ではなく
""" name a table 0 A 1 2 1 B 5 3-1 2 C 5 3-2 3 D 5 NaN 4 D-2 8 7 5 E 9 NaN """
となるようにしたいです。宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/29 12:54 編集
2019/04/30 03:44
2019/04/30 06:58
2019/04/30 07:36