python – Pandas groupby在重组组时更改返回类型

python – Pandas groupby在重组组时更改返回类型,第1张

概述我有一个数据帧: df = pd.DataFrame({'c':[0,1,1,2,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等)该组的长度( 我有一个数据帧:

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在重组组时更改返回类型所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193827.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存