2
私の問題は、start
とstop
の列とcounter
の列を持つデータフレーム(df1)があることです。私はvalue
とcount
の列を持つ別のデータフレーム(df2)を持っています。 start
とstop
にdf2のvalue
が含まれているdf1の行を探して、df2のcount
をdf1に追加します。 2つのデータフレームは異なる行を持ち、注文されません。第2のdfを使用してパンダdfを更新する
私はループをdf2を通して行ごとに書きましたが、速度が遅すぎるため、私ができる結合またはマージのタイプがあるかどうか疑問に思っていました。ご協力ありがとうございました。
import pandas as pd
df1 = pd.DataFrame()
df1['start'] = range(1,11)
df1['stop'] = range(2,12)
df1['count'] = [0]*10
#df1:
# start stop count
#0 1 2 0
#1 2 3 0
#2 3 4 0
#3 4 5 0
#4 5 6 0
#5 6 7 0
#6 7 8 0
#7 8 9 0
#8 9 10 0
#9 10 11 0
df2 = pd.DataFrame()
df2['count'] = range(21,26)
df2['value'] = [x + 0.5 for x in range(1,6)]
#df2:
# count value
#0 21 1.5
#1 22 2.5
#2 23 3.5
#3 24 4.5
#4 25 5.5
#Line below doesn't work, throws:
#ValueError: Can only compare identically-labeled Series objects
df1[df2[(df1.start < df2.value) & (df2.value < df1.stop)], 'count'] += df2.count
#desired update of df1:
# start stop count
#0 1 2 21
#1 2 3 22
#2 3 4 23
#3 4 5 24
#4 5 6 25
#5 6 7 0
#6 7 8 0
#7 8 9 0
#8 9 10 0
#9 10 11 0
に行くと仮定するパラメータ
side='left'
side='right'
によって決定され、あなたの間隔は、常に長さ1はありますか?その場合は、df2の値列でnp.floor()を使用し、df1.start = d2.valueの2つのデータフレームをマージします。その後、開始数と合計数でグループ化することができます – scomesこれらは常に長さとは限りません1 – mitoRibo
テーブルをマージしてから、applyを使用してカウント列を更新してください。 –