为了账号安全,请及时绑定邮箱和手机立即绑定

我如何在熊猫的几个月之间分配价值?

我如何在熊猫的几个月之间分配价值?

慕哥9229398 2022-11-29 15:32:08
我有以下数据框:    start_date delta       2018-06-30  2        2018-06-30  2        2018-06-30  2        2018-06-30  2        2018-06-30  4        2018-07-31  4        2018-07-31  2        2018-07-31  6   我会得到这样的数据框:start-date delta2018-06-30   12018-07-31   12016-06-30   12016-07-31   1 ...# (there was 2018-06-30 with delta = 4)2018-06-30   12018-07-31   12018-08-30   12018-09-30   1 and so on...我不需要空格,它只是为了可视化。所以我每个月都需要扩展 delta。在输出中,delta 列的每个值都必须等于 1。我该怎么做?
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

如果我理解正确的话,“delta”列中的每个值都是从“start_date”开始的月数。在结果中,“delta”列必须只包含一个,所以它并不重要,可以稍后添加。考虑到“start_date”列中的值是 datetime64 类型,这是我想出的:


np.hstack((df.apply(lambda row: pd.date_range(row['start_date'], periods=row['delta'], freq='m'), axis=1).values))

此代码转换问题中的数据框:


  start_date  delta

0 2018-06-30      2

1 2018-06-30      2

2 2018-06-30      2

3 2018-06-30      2

4 2018-06-30      4

5 2018-07-31      4

6 2018-07-31      2

7 2018-07-31      6

进入一维日期数组:


array(['2018-06-30T00:00:00.000000000', '2018-07-31T00:00:00.000000000',

       '2018-06-30T00:00:00.000000000', '2018-07-31T00:00:00.000000000',

       '2018-06-30T00:00:00.000000000', '2018-07-31T00:00:00.000000000',

       '2018-06-30T00:00:00.000000000', '2018-07-31T00:00:00.000000000',

       '2018-06-30T00:00:00.000000000', '2018-07-31T00:00:00.000000000',

       '2018-08-31T00:00:00.000000000', '2018-09-30T00:00:00.000000000',

       '2018-07-31T00:00:00.000000000', '2018-08-31T00:00:00.000000000',

       '2018-09-30T00:00:00.000000000', '2018-10-31T00:00:00.000000000',

       '2018-07-31T00:00:00.000000000', '2018-08-31T00:00:00.000000000',

       '2018-07-31T00:00:00.000000000', '2018-08-31T00:00:00.000000000',

       '2018-09-30T00:00:00.000000000', '2018-10-31T00:00:00.000000000',

       '2018-11-30T00:00:00.000000000', '2018-12-31T00:00:00.000000000'],

      dtype='datetime64[ns]')

可用于创建新数据框,即:


df2 = pd.DataFrame()

df2['start_date'] = np.hstack((df.apply(lambda row: pd.date_range(row['start_date'], periods=row['delta'], freq='m'), axis=1).values))

df2['delta'] = 1


查看完整回答
反对 回复 2022-11-29
  • 1 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号