2016-08-15 5 views
1

メッセージで示唆された.locメソッドに更新した後でも警告が表示される理由はわかりませんか?それは誤った警告ですか?DataFrameからスライスのコピーに値を設定しようとしています警告

eG.loc[:,'wt']=eG.groupby(['date','BB'])['m'].transform(weightFunction) 

値がデータフレーム

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy 
    if __name__ == '__main__': 

答えて

4

からスライスのコピーに設定されるようにしようとしている私はあなたのeG DFが他のDFのコピーであると思います...

ここに小さなデモがあります:

In [69]: df = pd.DataFrame(np.random.randint(0, 5, (10, 3)), columns=list('abc')) 

In [70]: cp = df[df.a > 0] 

In [71]: cp.loc[:, 'c'] = cp.groupby('a').b.transform('sum') 
c:\envs\py35\lib\site-packages\pandas\core\indexing.py:549: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame. 
Try using .loc[row_indexer,col_indexer] = value instead 

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy 
    self.obj[item_labels[indexer[info_axis]]] = value 

回避策:

In [72]: cp = df[df.a > 0].copy() 

In [73]: cp.loc[:, 'c'] = cp.groupby('a').b.transform('sum') 

それとも、元DFを必要としない場合は、メモリを節約することができます

In [74]: df = df[df.a > 0] 

In [75]: df.loc[:, 'c'] = df.groupby('a').b.transform('sum') 
関連する問題