python - 根据列中的整数展开行并拆分为日期之间的月数

标签 python pandas dataframe group-by

我有以下数据框:

<表类=“s-表”> <标题> id 开始日期 date_end reporting_month reporting_month_number months_length <正文> 1 2022-03-31 23:56:22 2022-05-01 23:56:22 2022-03 1 3 2 2022-03-31 23:48:48 2022-06-01 23:48:48 2022-03 1 4 3 2022-03-31 23:47:36 2022-08-01 23:47:36 2022-03 1 6

我想分割每个 id 行,这样我就可以为每个 months_length 分配一行。 ,从 reporting_month 日期开始,像这样:

<表类=“s-表”> <标题> id 开始日期 date_end reporting_month reporting_month_number months_length <正文> 1 2022-03-31 23:56:22 2022-05-01 23:56:22 2022-03 1 3 1 2022-03-31 23:56:22 2022-05-01 23:56:22 2022-04 2 3 1 2022-03-31 23:56:22 2022-05-01 23:56:22 2022-05 3 3 2 2022-03-31 23:48:48 2022-06-01 23:48:48 2022-03 1 4 2 2022-03-31 23:48:48 2022-06-01 23:48:48 2022-03 2 4 2 2022-03-31 23:48:48 2022-06-01 23:48:48 2022-04 3 4 2 2022-03-31 23:48:48 2022-06-01 23:48:48 2022-05 4 4 3 2022-03-31 23:47:36 2022-08-01 23:47:36 2022-03 1 6 3 2022-03-31 23:47:36 2022-08-01 23:47:36 2022-04 2 6 3 2022-03-31 23:47:36 2022-08-01 23:47:36 2022-05 3 6 3 2022-03-31 23:47:36 2022-08-01 23:47:36 2022-06 4 6 3 2022-03-31 23:47:36 2022-08-01 23:47:36 2022-07 5 6 3 2022-03-31 23:47:36 2022-08-01 23:47:36 2022-08 6 6

我尝试了多种方法,但似乎无法达到我的目标。

有人对如何实现这一目标有建议吗?

谢谢。

最佳答案

一种可能的解决方案是,

df= df.loc[df.index.repeat(df['months_length'])].reset_index(drop=True)
df['reporting_month_number'] = df.groupby('id')['reporting_month_number'].cumsum()

操作:

    id           date_start             date_end reporting_month  \
0    1  2022-03-31 23:56:22  2022-05-01 23:56:22         2022-03   
1    1  2022-03-31 23:56:22  2022-05-01 23:56:22         2022-03   
2    1  2022-03-31 23:56:22  2022-05-01 23:56:22         2022-03   
3    2  2022-03-31 23:48:48  2022-06-01 23:48:48         2022-03   
4    2  2022-03-31 23:48:48  2022-06-01 23:48:48         2022-03   
5    2  2022-03-31 23:48:48  2022-06-01 23:48:48         2022-03   
6    2  2022-03-31 23:48:48  2022-06-01 23:48:48         2022-03   
7    3  2022-03-31 23:47:36  2022-08-01 23:47:36         2022-03   
8    3  2022-03-31 23:47:36  2022-08-01 23:47:36         2022-03   
9    3  2022-03-31 23:47:36  2022-08-01 23:47:36         2022-03   
10   3  2022-03-31 23:47:36  2022-08-01 23:47:36         2022-03   
11   3  2022-03-31 23:47:36  2022-08-01 23:47:36         2022-03   
12   3  2022-03-31 23:47:36  2022-08-01 23:47:36         2022-03   

    reporting_month_number  months_length  
0                        1              3  
1                        2              3  
2                        3              3  
3                        1              4  
4                        2              4  
5                        3              4  
6                        4              4  
7                        1              6  
8                        2              6  
9                        3              6  
10                       4              6  
11                       5              6  
12                       6              6  

​ 说明:

  1. 根据 Month_length 重复行
  2. 根据 groupby“id”更新报告月份编号

关于python - 根据列中的整数展开行并拆分为日期之间的月数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73195918/

相关文章:

python - 只保留包含字符串列表中的字符串的 df 列值

python - 检索存储在 (?P<topic_id>\d+) 中的整数

python - 无法在 pyspark 中应用 pandas_udf

python - Pandas读取html表到dataframe无法打印

python - IndexError : list index out of range. 谁能帮我解决这个Python代码吗?包括 numpy 和 pandas 的概念

python - 让优化器根据容量和净负载切换电力存储

python - df[x]、df[[x]]、df ['x' ]、df[['x' ]] 和 df.x 之间的区别

python - pd.NamedAgg 覆盖以前的列值

python - 将对象转换为 Panda 数据框?

python - 如何按行拆分 pandas 数据框并包含创建的每个新数据框的标题?