访问 for 循环中的元素

时间:2021-04-19 14:27:29

标签: python pandas dataframe

我根据年份和月份分离我的数据框,但我想让它更加自动化。现在我必须对它们进行硬编码:

def year_month_open(c):
   c.Opened_Date.astype('string')
   x = c.Opened_Date.strftime('%Y-%m')

return x

df['year_month'] = df.apply(year_month_open,axis=1)`

Feb20 = df[df['year_month']=='2020-02']
Mar20 = df[df['year_month']=='2020-03']
Apr20 = df[df['year_month']=='2020-04']
May20 = df[df['year_month']=='2020-05']
Jun20 = df[df['year_month']=='2020-06']
Jul20 = df[df['year_month']=='2020-07']
Aug20 = df[df['year_month']=='2020-08']
Sep20 = df[df['year_month']=='2020-09']
Oct20 = df[df['year_month']=='2020-10']
Nov20 = df[df['year_month']=='2020-11']
Dec20 = df[df['year_month']=='2020-12']
Jan21 = df[df['year_month']=='2021-01']
Feb21 = df[df['year_month']=='2021-02']
Mar21 = df[df['year_month']=='2021-03']

你能建议一种方法来避免对它们进行编码吗,这样当我在下个月附加另一个数据集时,我就不必输入

Apr21 = Mar21 = df[df['year_month']=='2021-04']

1 个答案:

答案 0 :(得分:0)

首先,我建议您考虑是否确实需要这样做,或者其他解决方案(例如函数)是否更合适。例如,如果您使用带有月-年字符串的多索引作为索引,您可以只执行 df['Apr21'] 而不是创建单独的数据框。如果您想创建单独的变量,有以下内容,但请记住,您应该小心使用 eval 函数(如果命令进入 year_month 列,那可能非常危险)。

import calendar

def convert_date(date)
    year = date[:4]
    month_num = date[4:]
    month = calendar.month_name[int(month_num)][:3]
    return month+year

for group in df.groupby(year_month):
    month_name = convert_date(group[0])
    month_df = group[1]
    eval("{} = month_df".format(month_name))