首页 > 解决方案 > 使用部分列名将数据框拆分为 3 个新数据框

问题描述

我有一个包含三种不同类型(按名称)变量的数据框。我想使用变量的名称作为过滤器并将数据帧拆分为 3 个新数据帧。在我的第一个数据框中,我想要 PERIOD、A、B、C。在我的第二个数据框中,我想要 PERIOD、A_TREND、B_TREND、C_TREND,在我的第三个数据框中,我想要 PERIOD、A_Seasonally_Adjusted、B_Seasonally_Adjusted、C_Seasonally_Adjusted。

我在这里寻找特定的解决方案,它以通用的方式使用列名(_Trend & _Seasonally_Adjusted)中的信息来实现上述目标。

df=pd.DataFrame(np.array([['2021-04', 1, 12, 33, 2, 35, 6, 3, 8, 90], 
                       ['2021-05', 4, 98, 9, 5, 82, 94, 82, 9, 21],
                       ['2021-06', 81, 9, 8, 8, 9, 9, 8, 3, 72]]),
                   columns=['PERIOD', 'A', 'B', 'C', 
                            'A_Trend', 'A__Seasonally Adjusted', 
                            'B_Trend', 'B__Seasonally Adjusted', 
                            'C_Trend', 'C__Seasonally Adjusted'])

标签: pythonpandas

解决方案


你可以.filter使用like

trend_df = df.filter(like='Trend')
season_df = df.filter(like='Seasonally Adjusted')


print(trend_df)

  A_Trend B_Trend C_Trend
0       2       6       8
1       5      94       9
2       8       9       3

print(season_df)

  A__Seasonally Adjusted B__Seasonally Adjusted C__Seasonally Adjusted
0                     35                      3                     90
1                     82                     82                     21
2                      9                      8                     72

然后使用增量来获取您的起始列。

df.loc[:,~df.columns.isin(season_df.columns.tolist() + trend_df.columns.tolist())]

    PERIOD   A   B   C
0  2021-04   1  12  33
1  2021-05   4  98   9
2  2021-06  81   9   8

如果要Period在所有数据框中,首先设置为索引

df.set_index('Period') #or
df.set_index('Period',append=True)

推荐阅读