5

2つのデータフレーム'df_a'と'df_b'があり、どちらも同じインデックス構造と列を持っていますが、内部のデータ要素の一部が異なっているとします。

>>> df_a
           sales cogs
STK_ID QT           
000876 1   100  100
       2   100  100
       3   100  100
       4   100  100
       5   100  100
       6   100  100
       7   100  100

>>> df_b
           sales cogs
STK_ID QT           
000876 5    50   50
       6    50   50
       7    50   50
       8    50   50
       9    50   50
       10   50   50

次に、df_aの要素を同じ(インデックス、列)座標を持つdf_bの要素に置き換え、(インデックス、列)座標がdf_aの範囲を超えているdf_bの要素をアタッチします。パッチ「df_b」を「df_a」に追加するのと同じように:

>>> df_c = patch(df_a,df_b)
           sales cogs
STK_ID QT           
000876 1   100  100
       2   100  100
       3   100  100
       4   100  100
       5    50   50
       6    50   50
       7    50   50
       8    50   50
       9    50   50
       10   50   50

'patch(df_a、df_b)'関数の書き方は?

4

4 に答える 4

2

あるデータフレームのギャップを別のデータフレームの値(または完全な行)で埋めるには、df.combine_first()組み込みメソッドを調べてください。

In [34]: df_b.combine_first(df_a)
Out[34]: 
           sales  cogs
STK_ID QT             
000876 1     100   100
       2     100   100
       3     100   100
       4     100   100
       5      50    50
       6      50    50
       7      50    50
       8      50    50
       9      50    50
       10     50    50
于 2012-09-03T19:33:32.670 に答える
2

これを試して:

df_c = df_a.reindex(df_a.index | df_b.index)
df_c.ix[df_b.index] = df_b
于 2012-08-31T15:16:22.313 に答える
1

BrenBarnの回答に似ていますが、柔軟性があります。

# reindex both to union of indices
df_ar = df_a.reindex(df_a.index | df_b.index)
df_br = df_b.reindex(df_a.index | df_b.index)

# replacement criteria can be put in this lambda function
combiner = lambda: x, y: np.where(y < x, y, x)
df_c = df_ar.combine(df.br, combiner)
于 2012-08-31T15:37:37.770 に答える
0

私は同じ問題に苦しんでいました.以前の回答のコードは私のデータフレームでは機能しませんでした. それらには2つのインデックス列があり、再インデックス操作の結果、奇妙な場所に NaN 値が生じます (誰かがデバッグしたい場合は、データフレームの内容を投稿します)。

別の解決策を見つけました。これが他の人に役立つことを期待して、このスレッドを復活させています。

# concatenate df_a and df_b
df_c = concat([dfbd,dfplanilhas])

# clears the indexes (turns the index columns into regular dataframe columns)
df_c.reset_index(inplace='True')

# removes duplicates keeping the last occurence (hence updating df_a with values from df_b)
df_c.drop_duplicates(subset=['df_a','df_b'], take_last='True', inplace='True')

非常にエレガントなソリューションではありませんが、うまくいくようです。

df.update がすぐに join='outer' オプションを取得することを願っています...

于 2014-07-17T03:08:48.483 に答える