从列值等于x的数据框中获取数据-SettingWithCopyWarning:正在尝试从DataFrame的切片副本上设置值

时间:2019-06-15 13:38:14

标签: python-3.x pandas dataframe

Python和数据框的新增功能。我的问题源于我普遍对如何在不同情况下正确访问数据帧中的数据缺乏了解。 希望您能并且会帮助我。

我有一个名为“ df_hat”的数据框。它有一列称为“ blockid”。 “ blockid”在不同的行中可以具有相同的值,但是数据按“ blockid”分组,如下所示:

   #'df_hat' example
   blockid elec_consumption
0    3340            -0.408
1    3340            -0.006
2    3340            -0.888               
3    17229           -0.409                
4    17229           -0.007                 
5    17229           -0.889                 
6    17229           -0.345                 

我想做的是:对于'df_hat'中每个唯一的'blockid',我希望选择所有带有'blockid'的行,在这个'df_hat'子集中添加一个新列,做点事然后循环。新列应为“ elec_consumption”列的累加总和。

我这样做是这样的:

for bid in df_hat.blockid.unique(): 
     df_subset = df_hat.loc[df_hat['blockid'] == bid] #Original
     df_subset['elec_consumption_accum'] = df_subset['elec_consumption'].cumsum() #Original

这应该为我提供每个不同“ blockid”的数据帧子集,类似于下面的两个示例:

   #'df_hat' subset example, blockid = 3340
   blockid elec_consumption elec_consumption_accum
0    3340            -0.408                 -0.408
1    3340            -0.006                 -0.414
2    3340            -0.888                 -1.302

   #'df_hat' subset example, blockid = 17229
   blockid elec_consumption elec_consumption_accum
0    17229           -0.409                 -0.409
1    17229           -0.007                 -0.416
2    17229           -0.889                 -1.305
3    17229           -0.345                 -1.650

但是我的代码给了我这些警告。

C:\Users\User1\AppData\Local\Programs\Python\Python37-32\lib\site- 
packages\pandas\core\indexing.py:543: 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

我真的不确定如何解决此问题并正确使用.loc或.iloc。 任何建议深表感谢。 预先感谢。

0 个答案:

没有答案