英文:
how to combine year and month column and add a date
问题
我有一个包含月份和年份列的DataFrame:
```python
A = [2, 3, 4]
B = [2013, 2014, 2015]
df = pd.DataFrame({
'A': A,
'B': B,
})
我想要添加每个月的结束日期,并生成一个新列,如下所示:
A = [2, 3, 4]
B = [2013, 2014, 2015]
C = [2013-2-28, 2014-3-31, 2015-4-30]
df = pd.DataFrame({
'A': A,
'B': B,
'assessDate': C,
})
英文:
I have a DataFrame with a column of months and a column of years:
A = [2, 3, 4]
B = [2013, 2014, 2015]
df = pd.DataFrame({
'A': A,
'B': B,
})
I want to add the end date of each month and generate a new column like this:
A = [2, 3, 4]
B = [2013, 2014, 2015]
C = [2013-2-28, 2014-3-31, 2015-4-30]
df = pd.DataFrame({
'A': A,
'B': B,
'assessDate': C,
})
答案1
得分: 1
你可以使用calendar.monthrange(year, month)
函数,它会返回一个元组,其中第一个元素是月份的第一天,第二个元素是给定年份中该月的天数。
代码:
import calendar
A = [2, 3, 4, 6, 8, 9, 10, 11]
B = [2013, 2014, 2015, 2019, 2020, 2021, 2022, 2023]
C = [f"{year}-{month}-{calendar.monthrange(year, month)[1]}" for year, month in zip(B, A)]
df = pd.DataFrame({'A': A, 'B': B, 'assessDate': C})
输出:
A B assessDate
0 2 2013 2013-2-28
1 3 2014 2014-3-31
2 4 2015 2015-4-30
3 6 2019 2019-6-30
4 8 2020 2020-8-31
5 9 2021 2021-9-30
6 10 2022 2022-10-31
7 11 2023 2023-11-30
英文:
You can make use of calendar.monthrange(year, month)
, which returns a tuple where the first element is the first day of the month and the second is the number of days in the month in the given year.
Code:
import calendar
A = [2, 3, 4, 6, 8, 9, 10, 11]
B = [2013, 2014, 2015, 2019, 2020, 2021, 2022, 2023]
C = [f"{year}-{month}-{calendar.monthrange(year, month)[1]}" for year, month in zip(B, A)]
df = pd.DataFrame({'A': A, 'B': B, 'assessDate': C})
Output:
A B assessDate
0 2 2013 2013-2-28
1 3 2014 2014-3-31
2 4 2015 2015-4-30
3 6 2019 2019-6-30
4 8 2020 2020-8-31
5 9 2021 2021-9-30
6 10 2022 2022-10-31
7 11 2023 2023-11-30
答案2
得分: 0
建议使用 pd.to_datetime()
将它们转换为月初的日期时间。
然后,Pandas 允许您在该日期时间上添加一个偏移,表示月初和月末之间的差异。
df['assessDate'] = pd.to_datetime(dict(year=df['B'], month=df['A'], day=1)) + pd.offsets.MonthEnd(0)
英文:
My suggestion would be to use pd.to_datetime()
to turn those into a datetime for the first of the month.
Pandas then allows you to add an offset to that datetime representing the difference between the start and end of the month.
df['assessDate'] = pd.to_datetime(dict(year=df['B'], month=df['A'], day=1)) + pd.offsets.MonthEnd(0)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论