【问题标题】:Divide rows from yearly to monthly values pandas将行从年度值划分为月值熊猫
【发布时间】:2021-10-12 22:31:23
【问题描述】:
我正在尝试根据月份将具有开始日期和结束日期的订单项分成多行。
应根据特定月份的天数计算值。
例如,1个订单项的数据:
| id |
StartDate |
EndDate |
Annual |
| abc |
12/12/2018 |
01/12/2019 |
120,450 |
预期输出:
| id |
Month |
Year |
Monthly volume |
| abc |
12 |
2018 |
6,600 |
| abc |
1 |
2019 |
10,230 |
| abc |
2 |
2019 |
9,240 |
| abc |
3 |
2019 |
10,230 |
| abc |
4 |
2019 |
9,900 |
| abc |
5 |
2019 |
10,230 |
| abc |
6 |
2019 |
9,900 |
| abc |
7 |
2019 |
10,230 |
| abc |
8 |
2019 |
10,230 |
| abc |
9 |
2019 |
9,900 |
| abc |
10 |
2019 |
10,230 |
| abc |
11 |
2019 |
9,900 |
【问题讨论】:
标签:
pandas
dataframe
date
split
row
【解决方案1】:
下次你问的东西很少。
- 这是一种已有答案的情况,因此请务必尝试 google
首先是减少重复。其他帖子在下面的代码中引用。
- 您还应该始终包含您已经尝试过的代码,所以没有
喜欢做你的作业,但我们会帮你做。
- 您应该包含一个更容易复制的数据框。我不应该复制粘贴来构建它,如下面的代码所示。
- 您显然正在做某事将年度总量转换为月度总量,但您没有对此进行解释,所以不要指望它会为您完成。
- 最后,此代码不会转换为单独的月份和年份列,但是一旦您有了日期,这对您来说应该是微不足道的(或谷歌如何做)。
import pandas as pd
df = pd.DataFrame(
data = [['abc','12/12/2018','12/01/2019',120450]],
columns = ['id', 'startDate', 'EndDate', 'Annual']
)
df['startDate'] = pd.to_datetime(df['startDate'])
df['EndDate'] = pd.to_datetime(df['EndDate'])
# pd.bdate_range(start="2020/12/16", end="2020/12/26", freq="C", weekmask="Sat Sun")
# %%
df_start_end = df.melt(id_vars=['id', 'Annual'],value_name='date')
# credit to u/gen
# https://stackoverflow.com/questions/42151886/expanding-pandas-data-frame-with-date-range-in-columns
df = (
df_start_end.groupby('id')
.apply(lambda x: x.set_index('date')
.resample('M').pad())
.drop(columns=['id','variable'])
.reset_index()
)
print(df)