我有以下panda数据帧:
import pandas as pd
df = pd.DataFrame({'ID': [1,2,3,4],
'month': [12, 2, 8, 6],
'year': [2021, 2022, 2022, 2020]})
print(df)
ID month year
1 12 2021
2 2 2022
3 8 2022
4 6 2020
我需要在数据帧中添加一个新列。此列必须包含数据帧行的月份和年份的最大日期。在互联网上搜索,我发现了";days_in_month";并实现如下:
df['Max_day'] = 0
for i in range(0,len(df)):
v_month = df['month'].loc[i]
v_year = df['year'].loc[i]
df['Max_day'].loc[i] = pd.Period(v_year.astype(str) + "-" +
v_month.astype(str)).days_in_month
此实现工作完美,输出如所需:
ID month year Max_day
1 12 2021 31
2 2 2022 28
3 8 2022 31
4 6 2020 30
但是,运行此代码需要很长时间。有人知道优化运行时的方法吗?
使用to_datetime
和3列year, month, day
作为日期时间,然后使用Series.dt.days_in_month
:
df['Max_day'] = pd.to_datetime(df[['year','month']].assign(day=1)).dt.days_in_month
print(df)
ID month year Max_day
0 1 12 2021 31
1 2 2 2022 28
2 3 8 2022 31
3 4 6 2020 30