如何编写自动化函数将DataFrame拆分为含日期列的多个子DataFrame
拆分DataFrame为含日期列的子DataFrame集合
你可以通过遍历非日期列,将每一列与指定的日期列组合成独立的子DataFrame,以下是实现这个需求的自动化函数:
实现代码
import pandas as pd def split_df_by_columns(df, date_col): # 筛选出所有非日期列 non_date_cols = [col for col in df.columns if col != date_col] # 用字典存储子DataFrame,键为原列名,方便后续索引 sub_dataframes = {} for col in non_date_cols: # 组合日期列与当前列,生成子DataFrame并复制避免视图关联 sub_dataframes[col] = df[[date_col, col]].copy() # 若需返回列表形式而非字典,替换为 return list(sub_dataframes.values()) return sub_dataframes
使用示例
假设你有如下原始DataFrame:
# 构造示例数据 sample_data = { 'date': ['2024-01-01', '2024-01-02', '2024-01-03'], 'sales': [100, 150, 200], 'profit': [20, 30, 40], 'customers': [50, 60, 70] } df = pd.DataFrame(sample_data) df['date'] = pd.to_datetime(df['date']) # 确保日期列格式正确
调用函数拆分:
# 指定日期列名为'date',拆分得到子DataFrame字典 split_result = split_df_by_columns(df, 'date') # 访问单个子DataFrame,比如sales对应的子DF print(split_result['sales'])
关键说明
- 使用
.copy()是为了避免子DataFrame与原DataFrame共享数据视图,防止修改子DF时意外影响原数据 - 返回字典的形式可以通过原列名快速定位对应的子DataFrame,若只需要列表形式,直接返回
list(sub_dataframes.values())即可,此时子DF的数量正好是原DataFrame列数减1(排除日期列)
内容的提问来源于stack exchange,提问作者Ryan Ruhany
相关产品推荐
相关产品推荐

