使用 pandas.cut 分箱连续变量

Binning continuous variable using pandas.cut

我正在尝试使用 pd.cut 对连续变量(net_revenue -> 范围 -2000 到 455)进行分箱。但是我得到了


SettingWithCopy 错误


(试图在 DataFrame 的切片副本上设置一个值。 尝试使用 .loc[row_indexer,col_indexer] = value 代替

请参阅文档中的注意事项:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy)

这是我的代码,

oct20_df_clean = pd.DataFrame()
oct20_df_clean = oct20_df[(oct20_df['tenure'] >=0) & 
                          (oct20_df['tenure'].notnull()]                               ]

oct20_df_clean['bin_net_revenue'] = pd.cut(x=oct20_df_clean.loc[:,'net_revenue'], 
                                                             bins = [-2000, -157.56, -44.81, 0.0, 28.58, 85.0, 114.25, 148.17, 148.58,
                                                                    148.67, 148.83, 456], 
                                                             labels = ['1%', '5%', '10%', '25%', '50%', '75%', '90%', '95%','97%',
                                                                       '99%', '100%'], 
                                                            precision =2
                                                           )

谢谢!

问题不在于pd.cut,而在于:

oct20_df_clean = oct20_df[(oct20_df['tenure'] >=0) & 
                          (oct20_df['tenure'].notnull()] 

表示 oct20_df_cleanoct20_df 的一部分,无法修改。用 copy 链接起来,你会很好

oct20_df_clean = oct20_df[(oct20_df['tenure'] >=0) & 
                          (oct20_df['tenure'].notnull()
                         ].copy()