我有一个数据集的个人资料,如姓名,身高,体重和出生日期。我会用出生在特定月份和年份的人的数量来构建一个图表。我用巨蟒熊猫来完成这个任务,我的策略是尝试按年和月分组,并添加使用计数。但我得到的最接近的是按年或按月统计的人数,而不是两者都计算。
df['birthdate'].groupby(df.birthdate.dt.year).agg('count')堆栈溢出中的其他问题指向了一只名为TimeGrouper的石斑鱼,但在熊猫文档中搜索却一无所获。有什么想法吗?
发布于 2016-08-05 14:52:27
若要对多个标准进行分组,请传递列或标准的列表:
df['birthdate'].groupby([df.birthdate.dt.year, df.birthdate.dt.month]).agg('count')示例:
In [165]:
df = pd.DataFrame({'birthdate':pd.date_range(start=dt.datetime(2015,12,20),end=dt.datetime(2016,3,1))})
df.groupby([df['birthdate'].dt.year, df['birthdate'].dt.month]).agg({'count'})
Out[165]:
birthdate
count
birthdate birthdate
2015 12 12
2016 1 31
2 29
3 1更新
从版本0.23.0开始,由于限制多索引级别名称必须是唯一的,上面的代码不再工作,现在需要rename级别以使其工作:
In[107]:
df.groupby([df['birthdate'].dt.year.rename('year'), df['birthdate'].dt.month.rename('month')]).agg({'count'})
Out[107]:
birthdate
count
year month
2015 12 12
2016 1 31
2 29
3 1发布于 2017-10-07 20:10:53
您还可以在to_period中与dt访问器一起使用“每月”期:
In [11]: df = pd.DataFrame({'birthdate': pd.date_range(start='20-12-2015', end='3-1-2016')})
In [12]: df['birthdate'].groupby(df.birthdate.dt.to_period("M")).agg('count')
Out[12]:
birthdate
2015-12 12
2016-01 31
2016-02 29
2016-03 1
Freq: M, Name: birthdate, dtype: int64值得注意的是,如果日期时间是索引(而不是列),则可以使用resample
df.resample("M").count()发布于 2016-08-05 15:06:04
另一种解决方案是将birthdate设置为索引并进行重采样:
import pandas as pd
df = pd.DataFrame({'birthdate': pd.date_range(start='20-12-2015', end='3-1-2016')})
df.set_index('birthdate').resample('MS').size()输出:
birthdate
2015-12-01 12
2016-01-01 31
2016-02-01 29
2016-03-01 1
Freq: MS, dtype: int64https://stackoverflow.com/questions/38792122
复制相似问题