【发布时间】:2021-06-14 17:33:59
【问题描述】:
我对 Python 很陌生。我有一个虚拟数据集(25 X 6)用于练习。在 6 列中,我有 1 个目标变量(二进制)和 5 个自变量(4 个分类变量和 1 个数字变量)。我正在尝试通过 4 个分类列中的每一个中的值来查看我的目标分布(并且没有为单独的列编写代码 - 但使用 for 循环使用,以便我可以在将来扩展它以用于更大的数据集)。如下所示:
我已经成功地做到了这一点(上图),但由于我只能通过在 for 循环中使用 计数器 来实现这一点,我认为这不是 Python 优雅的,并且很确定可能有更好的方法(例如CarWash.groupby([i,'ReversedPayment']).size().reset_index().pivot(index = i,columns = 'ReversedPayment',values=0).axes.plot(kind='bar', stacked=True)。我正在努力处理这个ax = 设置)下面是我的非优雅Python代码(不可扩展):
counter = 1
p = 0
q = 0
fig,axes = plt.subplots(2,2,figsize=(15,10))
for i in categoricals[:-1]:
CarWash.groupby([i,'ReversedPayment']).size().reset_index().pivot(index = i,columns = 'ReversedPayment',values=0).plot(kind='bar', stacked=True,ax = axes[p][q])
counter = counter+1
q = q+1
if counter==3:
q=0
p = p+1
这是完整的数据生成代码:
d = {
'SeniorCitizen': [0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0] ,
'CollegeDegree': [0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1] ,
'Married': [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1] ,
'FulltimeJob': [1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1] ,
'DistancefromBranch': [7,9,14,20,21,12,22,25,9,9,9,12,13,14,16,25,27,4,14,14,20,19,15,23,2] ,
'ReversedPayment': [0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,1,0] }
CarWash = pd.DataFrame(data = d)
categoricals = ['SeniorCitizen','CollegeDegree','Married','FulltimeJob','ReversedPayment']
numerical = ['DistancefromBranch']
CarWash[categoricals] = CarWash[categoricals].astype('category')
我的另一个小问题是获取数据标签。任何cmets,非常感谢您的建议。谢谢。
【问题讨论】:
-
感谢您的建议 - 我刚刚添加了完整数据的数据生成代码
标签: python for-loop pandas-groupby