df = pd.DataFrame({'c':[0,1,2,2],'date':pd.to_datetime(['2016-01-01','2016-02-01','2016-03-01','2016-04-01','2016-05-01','2016-06-01'])})
对于每一行,我想得到一个数字=每个日期的月数(Jan = 1,Feb = 2等)该组的长度(第一组有1个成员,第2组有2个等):
所以它应该返回类似的东西:
c date num0 2016-01-01 21 2016-02-01 41 2016-03-01 52 2016-04-01 72 2016-05-01 82 2016-06-01 9
我创建了一个函数:
def testlambda(x): print(x) return x.dt.month.astype('int') + len(x)
并使用groupby转换:
df['num'] = df.groupby(['c'])['date'].transform(lambda x: testlambda(x))
但是返回的新列仍然是日期格式,即使我的lambda返回int.
该怎么办?
解决方法 尝试使用DataFrameGroupBy.transform()而不是SerIEsGroupBy.transform(),因为后者试图将结果强制转换为源dtype:In [131]: def testlambda(x): ...: #print(x) ...: return x.dt.month.astype('int') + len(x) ...:In [132]: dfOut[132]: c date0 0 2016-01-011 1 2016-02-012 1 2016-03-013 2 2016-04-014 2 2016-05-015 2 2016-06-01# v v - thats's the only difference In [133]: df['num'] = df.groupby(['c'])[['date']].transform(lambda x: testlambda(x))In [134]: dfOut[134]: c date num0 0 2016-01-01 21 1 2016-02-01 42 1 2016-03-01 53 2 2016-04-01 74 2 2016-05-01 85 2 2016-06-01 9总结
以上是内存溢出为你收集整理的python – Pandas groupby在重组组时更改返回类型全部内容,希望文章能够帮你解决python – Pandas groupby在重组组时更改返回类型所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)