【发布时间】:2014-12-15 04:55:12
【问题描述】:
问题:给定一个包含多个条目的数据框和 %Y%m%d 形式的“日期”列(即 yyyy-mm-dd;这些条目以字符串形式出现)什么是一种计算快速的方法来向包含月份字典顺序的数据框中添加一列?
为什么在 StackOverflow 上:给定指定的年份和月份,上述排序允许相对于指定月份轻松上升或下降任意月数。我有一个有效的临时解决方案,但想象一下这个问题之前已经很好地解决了。
上下文:举例来说,给定数据框df:
date user
0 2011-10-06 1
1 2011-09-01 2
2 2011-11-05 3
3 2012-01-01 1
4 2012-01-01 2
5 2012-01-02 3
想要的输出是:
date user absmonth
0 2011-10-06 1 2
1 2011-09-01 2 1
2 2011-11-05 3 3
3 2012-01-01 1 4
4 2012-01-01 2 4
5 2012-01-02 3 4
我的尝试:
1) 我做了一个临时定义,它根据简单的算术设置“absmonth”的值;每行通过df.loc[row, 'absmonth'] = ...。这“有效”,但在计算上非常很慢。
2) 使用 groupby:
df['newdate']=pd.to_datetime(df['date'],format='%Y-%m-%d')
df = df.set_index('newdate')
monthsgroup = df.groupby(df.index.month, df.index.year)
产生错误:
axis = self._AXIS_ALIASES.get(axis, axis)
TypeError: unhashable type: 'numpy.ndarray'
还有:
months = df.gropuby(df.index.month)
len(months)
4
此时,我应该可以使用 months 在 df 上使用类似“应用”功能的东西,但我有点迷失了......
ps:
pd.__version__
'0.14.0'
感谢您的帮助。
【问题讨论】:
-
不确定月份的字典顺序是什么意思?用英文拼出的月份是按字母顺序排列的吗?
-
所有数字对(Y,m)的集合上的字典。 IE。我们写 "(Y,m)
标签: python-2.7 pandas group-by dataframe