2015-06-03 4 views
0

В то время как я вообще понимаю предупреждения, и много сообщений справиться с этим, я не понимаю, почему я получаю предупреждение только тогда, когда я достигаю GroupBy линии (последний):панды settingwithcopywarning на GroupBy

grouped = data.groupby(['group']) 

for name, group in grouped: 
    data2=group.loc[data['B-values'] > 0] 
    data2["unique_A-values"]=data2.groupby(["A-values"])["A-values"].transform('count') 

EDIT: Вот мой dataframe (данные):

group A-values B-values 
human 1   -1 
human 1   5 
human 1   4 
human 3   4 
human 2   10 
bird  7   8 
.... 

для B-значений> 0 (data2=group.loc[data['B-values'] > 0]):

имеет два А-значения человека, равным один, один равен 3 и один равен 2 (data2["unique_A-values"]=data2.groupby(["A-values"])["A-values"].transform('count'))

+0

Что вы задумали здесь? Чтобы изменить группу или исходный df? Если это первое, вы можете игнорировать его, если это последнее, поэтому именно поэтому предупреждение возникает. Если вы хотите выполнить первое без предупреждений, вы можете сделать 'data2 = group.loc [data ['B-values']> 0] .copy()' – EdChum

+0

Спасибо Ed, см. Мое редактирование – Sara

+0

Итак, вы хотите обновить orig df или нет, вы не ответили на мой вопрос – EdChum

ответ

1

Вы получаете сообщение об ошибке, потому что вы берете ссылку на свою группу, а затем попробуйте добавить к ней столбец, поэтому просто предупредите вас, что если вы намерены обновите оригинальный df, тогда это может работать или не работать.

Если вы только изменение локальной копии затем сделать копию с помощью copy() так что явное и предупреждение исчезнет:

for name, group in grouped: 
    data2=group.loc[data['B-values'] > 0].copy() # <- add .copy() here 
    data2["unique_A-values"]=data2.groupby(["A-values"])["A-values"].transform('count')