python - 我想根据年份拆分我的数据框
问题描述
我有一个数据框,其中包含一个带有 datetime64 格式的日期值的列。我想根据年份将我的数据框拆分为单独的数据框。我在下面写了代码,它有效但非常不实用。
希望有人有更好的解决方案!
# import libs
import numpy as np
import pandas as pd
from random import sample
# Make some random dataframe with two columns
date = np.arange('2005-02', '2008-03', dtype='datetime64[D]')
status = ["X"]*(int(round(0.9*len(date),0))) +['y']*(int(round(0.05*len(date),0)))+['z']*(int(round(0.05*len(date),0)))
newstatus = sample(status, len(status))
data = {'Data': date, 'Status': newstatus}
df = pd.DataFrame(data)
# Extract year from date and make dummies index for splitting
df['Year'] = pd.DatetimeIndex(df['Data']).year
df = pd.get_dummies(df, columns = ['Year'])
# Split on dummies
df_2007, df_2006, df_2005, df_2008 = df, df, df, df
df_2008= df_2008[df_2008.Year_2008 != 0]
df_2007 = df_2007[df_2007.Year_2007 != 0]
df_2006= df_2006[df_2006.Year_2006 != 0]
df_2005= df_2005[df_2005.Year_2005 != 0]
#Remove Dummies
years = ['Year_2005', 'Year_2006', 'Year_2007', 'Year_2008']
df_2008 = df_2008.drop(years, axis = 1)
df_2007 = df_2007.drop(years, axis = 1)
df_2006 = df_2006.drop(years, axis = 1)
df_2005 = df_2005.drop(years, axis = 1)
解决方案
也许这可以帮助你:
years = df['Data'].dt.year.unique() # I'm guessing Data should be Date really but I'll go along with it.
dfs = {y: df[df['Data'].dt.year == y] for y in years}
这将创建一个字典,其中键是年份,值是对应于每年的数据框。这意味着dfs[2008]
为您提供包含 2008 年数据的数据框。
推荐阅读
- c++ - 什么是组合的正确代码生成
- android - 无法在新活动中的 firebase 回收器视图适配器上从 firebase 数据库加载数据
- java - Cordova 找不到 JAVA_HOME
- javascript - 如何使用带有文本而不是空/数字的 VuetifyJS 时间选择器组件?
- php - 使用 phpspreadsheet 使用 excel 文件填充 mysql 数据库
- python - 是否保留以下 IP-Range 100.64.0.0/10?
- c++ - 如果静态变量只为程序的整个部分存储了一份副本,为什么我不能使用静态变量交换 2 个数字?
- javascript - 使用 Admin SDK 批量写入 Firestore
- jquery - Tinymce 按钮未出现在某些页面中
- java - 将 JPanel 添加到 JLayeredPane 会导致不调用paint() 方法