简体   繁体   中英

pandas settingwithcopywarning on groupby

While I generally understand the warnings, and many posts deal with this, I don understand why I am getting a warning only when I reach the groupby line (the last one):

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: Here is my dataframe (data):

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

For B-values > 0 ( data2=group.loc[data['B-values'] > 0] ):

human has two A-values equal to one, one equals to 3 and one equals to 2 ( data2["unique_A-values"]=data2.groupby(["A-values"])["A-values"].transform('count') )

You get the error because you take a reference to your groupby and then try add a column to it, so it's just warning you that if your intention is to update the original df then this may or may not work.

If you are just modifying a local copy then take a copy using copy() so it's explicit and the warning will go away:

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')

FYI the pandas groupby user guide says:

Group chunks should be treated as immutable, and changes to a group chunk may produce unexpected results.

for name, group in grouped:
    # making a reference to the group chunk
    data2 = group.loc[data['B-values'] > 0]
    # trying to make a change to that group chunk reference
    data2["unique_A-values"] = data2.groupby(["A-values"])["A-values"].transform('count')

That said, it looks like you just want to count the values in the data frame so you may be better off using value_counts() :

>>> data[data['B-values']>0].groupby('group')['A-values'].value_counts()
group  A-values
bird   7           1
human  1           2
       2           1
       3           1
Name: A-values, dtype: int64

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM