热线电话:13121318867

登录
2019-03-01 阅读量: 703
如何在pandas数据帧中找到混合分类变量的均值?

我有关于使用各种社交媒体平台的人们不同年龄的调查数据集。我想计算社交媒体应用使用量的平均人数。以下是示例数据的外观:

在此输入图像描述

这里是可重现的pandas数据帧:

df=pd.DataFrame({'age': np.random.randint(10,100,size=10),

'web1a': np.random.choice([1, 2], size=(10,)),

'web1b': np.random.choice([1, 2], size=(10,), p=[1./3, 2./3]),

'web1c': np.random.choice([1, 2], size=(10,)),

'web1d': np.random.choice([1, 2], size=(10,))})

这是我试过的:

df.pivot_table(df, values='web1a', index='age', aggfunc='mean')

但它没有效率,也没有产生我想要的输出。有没有想过要做到这一点?谢谢

更新:

对我来说,这样做的方法是,首先在每列中选择分类值并获得它的平均值,对于其他列可以是相同的。如果我这样做,我怎么能很好地绘制它们?

请注意,在列web1a,web1b,web1c,web1d,1意味着用户和2分别指非用户。我想计算用户和非用户的平均年龄。我怎样才能做到这一点?有人给我一个可能的想法来实现这一目标吗?

解决办法:只使用以'web'开头的列。有比“1”和“2”更多的值,所以我假设你只想分析用户和非用户,而不是其他任何东西。只要知道要绘制的值,就可以以相同的方式更改值或在图表中添加其他值。

df = df.filter(regex=('web|age'),axis=1)

userNr =
'1'
nonUserNr =
'2'
users = list()
nonUsers = list()
labels = [x
for x in df.columns.tolist() if 'web' in x]
for col in labels:
users.append(df.loc[:,[
'age',col]].groupby(col).mean().loc[userNr][0])
nonUsers.append(df.loc[:,[
'age',col]].groupby(col).mean().loc[nonUserNr][0])

from matplotlib import pyplot as plt
x = np.arange(
1, len(labels)+1)
ax = plt.subplot(
111)
ax.bar(x-
0.1, users, width=0.2,color='g')
ax.bar(x+
0.1,nonUsers, width=0.2,color='r')
plt.xticks(x, labels)
plt.legend([
'users','non-users'])
plt.show()

在此输入图像描述

0.0000
4
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子