基础真的很重要!!!
我想做的一件事是对百货公司每个楼层的会员重合性进行计算,以考察不同楼层的消费者购买关联性。
先上代码:
以上主要思路就是循环每个楼层的会员,然后计算两个楼层的会员重合数量,用重合数量除以二者总数量,就得到自定义的相关性,最大值为0.5,即两个楼层一样。
使用方法和遇到的问题如下:
1、定义空数据框,用于后期添加数据
xg=pd.DataFrame()#定义相关性数据框,这里注意,我们最好不要定义xg=pd.DataFrame([ ] ),这样的空数据框只是一维的,后期如果添加数据可能会出现问题。
2、剔除重复项
b_drop = b.drop_duplicates(subset=‘会员卡号’)#去重,subset指定列,这列数据有重复,就删除整行。
3、起初只得到相关系数,但为了清楚表达什么和什么的相关,必须指定名称,但是问题重重,原因就在于我开始想的是,循环一次,加一个项目或者加一个行名字,但是总是出现问题
当我想, xg[‘交互项’][i]=name1+"*"+name2,出现了错误提示, 无交互项这个列,原因在于我们之前根本没有指定添加这一列,我们要添加列必须 xg[‘交互项’]=“[ ] ”,这之后才能进行赋值,但是问题在于即使我们在之前添加这一列,我们也不能进行赋值,因为代码运行到xg[‘交互项’]=“[ ] ,又出现了这一列空值,但我们又不能把其放在循环之外,因此,我们只能循环写入项目名称,再在循环外加入一列,或者修改索引名称即可。
4、append()函数提供纵向合并的功能,但是数据必须是序列或者数据框,因此得出的相关系数必须转换为数据框,
xg = xg.append(pd.DataFrame([b_c]))
一定不能 xg = xg.append(b_c),否则会报错。
5、dataframe行列名称的修改
列名称修改
修改行名:
修改行列名的另外一种方法:
当然推荐使用第二种方法,更加方便
但是要明确区分和reindex的区别:重新索引,不是改变索引名称,而是行的数值变化对应于索引位置的变化,如果是新索引,就会在那一行返回NAN
感兴趣的可以去查看一下文章