pandas 如何在Python中的某一天为某个国家/地区指定季节?

xv8emn3q  于 2023-03-11  发布在  Python
关注(0)|答案(2)|浏览(87)

我正在处理一个大数据集它看起来像这样-

我的目标是创建一个名为“季节”的新列,其中包含每个国家每天的季节。为此,我必须检查该国家是在北方半球还是南半球,然后根据以下标准为它们分配季节-
如果国家位于北方半球-
季节= Spring ,如果月份为3月、4月、5月
季节=夏季,如果月份为六月、七月、八月
季节=秋季,如果月份为九月、十月、十一月
季节=冬季,如果月份为十二月、一月、二月
如果国家位于南半球-
季节= Spring ,如果月份为9月、10月、11月
季节=夏季(如果月份为十二月、一月、二月)
季节=秋季,如果月份为三月、四月、五月
季节=冬季,如果月份为六月、七月、八月
我得到了所有北半球和南半球国家的列表,以2个列表的形式命名为north_hem_list和south_hem_list。
我试图通过从日期中找到月份来解决这个问题,创建一个名为season的新列,然后尝试通过迭代数据集来分配季节。我试图通过创建一个带有月份的新列来解决这个问题,然后使用iterrow和iteritem来迭代 Dataframe 。但是,它不起作用。
会很感激任何和所有的帮助。

bvuwiixz

bvuwiixz1#

您可以尝试此解决方案(未提供输入df,因此无法显示结果..)

season_dict = {
    'Northern Hemisphere': {
        'Spring': [3, 4, 5],
        'Summer': [6, 7, 8],
        'Fall': [9, 10, 11],
        'Winter': [12, 1, 2]
    },
    'Southern Hemisphere': {
        'Spring': [9, 10, 11],
        'Summer': [12, 1, 2],
        'Fall': [3, 4, 5],
        'Winter': [6, 7, 8]
    }
}

# create a function to assign season based on hemisphere and month
def get_season(row):
    date = pd.to_datetime(row['Date'])
    month = date.month
    hemisphere = ''
    if row['Country'] in north_hem_list:
        hemisphere = 'Northern Hemisphere'
    elif row['Country'] in south_hem_list:
        hemisphere = 'Southern Hemisphere'
    for season, months in season_dict[hemisphere].items():
        if month in months:
            return season

# apply the function to the dataframe to create the season column
df['Season'] = df.apply(get_season, axis=1)
du7egjpx

du7egjpx2#

您可以用途:

# Sample
df = pd.DataFrame({'Code': ['AFG', 'ZWE'], 'Day': ['2020-02-24', '2023-02-01']})
df['Day'] = pd.to_datetime(df['Day'])

# Detection based on Code
north_hem_list = ['AFG']
south_hem_list = ['ZWE']

# Seasons
north_seasons = ['Winter', 'Spring', 'Summer', 'Fall']
south_seasons = ['Summer', 'Fall', 'Winter', 'Spring']

season = (df['Day'].dt.month % 12 + 3) // 3 - 1
df['Season'] = np.where(df['Code'].isin(north_hem_list),
                        np.array(north_seasons)[season],
                        np.array(south_seasons)[season])

输出:

>>> df
  Code        Day  Season
0  AFG 2020-02-24  Winter
1  ZWE 2023-02-01  Summer

相关问题