【问题标题】:Pandas six month resampling - user age/gender/plays dataPandas 六个月重采样 - 用户年龄/性别/播放数据
【发布时间】:2018-02-22 03:07:56
【问题描述】:

我正在尝试优化一个过于塞满年度数据的可视化,如下所示。

这是我的usa_signup_age 数据框的一部分:

          gender age
signup      
2002-10-29  m   31.0
2002-10-29  m   23.0
2002-10-29  m   23.0
2002-11-22  m   29.0
2002-11-28  m   25.0
2002-12-02  m   31.0
2003-02-06  m   29.0
2003-02-06  m   25.0
2003-02-06  m   25.0
2003-02-06  m   42.0

我的目标是计算以六个月为间隔显示的男性与女性的平均年龄,以减少过度绘制。

usa_signup_age.groupby('gender')['age'].plot(legend=True)
plt.xlabel('years')
plt.ylabel('age by gender')
plt.title('total signup ages per gender per year')
plt.show()

resample() 方法是否有 '6M' 参数之类的东西?

【问题讨论】:

  • usa_signup_age.groupby('gender')['age'].mean()?
  • df.groupby('gender').resample('6m').mean()

标签: python pandas dataframe data-visualization pandas-groupby


【解决方案1】:

您可以使用pd.Grouper() 进行自定义分组,然后在此基础上使用.apply() 应用更多分组。这对于日期时间对象非常方便。使用pd.to_datetime()signup 变量转换为日期时间后,您可以:

usa_signup_age.groupby(pd.TimeGrouper(key="signup", freq="6M")).apply(lambda x: x.groupby('gender').mean())

这将返回:

                         age
signup     gender
2002-10-31 m       25.666667
2003-04-30 m       29.428571

【讨论】:

  • 这就是我得到的,数据分组现在更清晰了,但我失去了男性和女性分组的分离......usa_signup_age['signup'] = pd.to_datetime(usa_signup_age.index) usa_signup_age.groupby(pd.Grouper(key='signup', freq="6M")).mean().plot(legend=True)
  • @Mr.Jibz 不好意思,我忘了按性别划分,现在更新解决方案。
  • 如何制作条形图? plot(kind='bar')?
  • @Mr.Jibz 有多种方法可以做到这一点,df.plot 可以,或者您可以使用plt.barseaborn 库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多