基于另一个datafram的值将数据帧拆分为多个数据帧

2024-06-10 09:57:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧df1和df2。df1就像一个具有以下值的字典

Ticker          INDUSTRY_SECTOR
TLRA_Equity     Communications
KAMN_Equity     Industrial
B_Equity        Industrial
ARNC_Equity     Industrial
RC_Equity       Consumer, Non-cyclical
DAR_Equity      Consumer, Non-cyclical

df2具有以下值:

^{pr2}$

我想根据df1数据帧中的INDUSTRY_SECTOR将df2拆分为3个新的数据帧。在

  • 日期,TLRA_Equity列应在Communications数据框中
  • 日期,KAMN_Equity,bu Equity,ARNC_Equity列应在Industrial数据框中
  • 日期,RC\U Equity,DAR\u Equity列应在Consumer, Non-cyclical数据框中

预期产量:

  • Communications数据帧

    Date   TLRA_Equity  
    1/1/2000  10            
    2/1/2000  15            
    3/1/2000  17             
    
  • Industrial数据帧

    Date    KAMN_Equity  B_Equity  ARNC_Equity 
    1/1/2000  20          30          40       
    2/1/2000  25          35          45       
    3/1/2000  27          37          47    
    
  • Consumer, Non-cyclical数据帧

    Date          RC_Equity DAR_Equity
    1/1/2000        50          60
    2/1/2000        55          65
    3/1/2000        57          67
    

请让我知道怎样做才有效。我所要做的是连接列名,例如Communications_TLRA_Equity,然后根据列名的前半部分拆分dataframe。在

代码:

col_names = df2.columns.values.tolist()
d_cols = df2.columns.map(df1.set_index('Ticker')['INDUSTRY_SECTOR'].get)
print(d_cols)
df.columns = [d_cols + "_"  str(col) for col in df.columns]

for sector, df_sector in df.columns.str.split('_').str[0].tolist():
     print(sector)
     print(df_sector)

但这很复杂。需要更好的解决方案。在


Tags: columns数据dfconsumerdf1df2nonindustrial
2条回答

考虑创建一个dict框架,关键是你的“行业部门”名称。在

首先创建一个dict of INDUSTRY_SECTOR:Ticker columns

g = df1.groupby('INDUSTRY_SECTOR')['Ticker'].apply(list).to_dict()
print(g)

{'Communications': ['TLRA_Equity'], 'Consumer, Non-cyclical': ['RC_Equity', 'DAR_Equity'], 'Industrial': ['KAMN_Equity', 'B_Equity', 'ARNC_Equity']}

然后创建听写理解:

^{pr2}$ N、 B。

正如@Parfait指出的,要包含Date列,您需要将其设置为dict理解中的索引。如果不希望Date作为索引,请使用:

frames = {k:df2.set_index('Date')[v].reset_index() for k,v in g.items()}

可以使用groupby创建数据帧列表

dfs = [df2.set_index('Date')[ticker].reset_index() for ticker in df1.groupby('INDUSTRY_SECTOR').Ticker.apply(list)]


dfs[0]

    Date    TLRA_Equity
0   1/1/2000    10
1   2/1/2000    15
2   3/1/2000    17


dfs[1]

    Date    RC_Equity   DAR_Equity
0   1/1/2000    50      60
1   2/1/2000    55      65
2   3/1/2000    57      67

dfs[2]


    Date    KAMN_Equity B_Equity    ARNC_Equity
0   1/1/2000    20      30          40
1   2/1/2000    25      35          45
2   3/1/2000    27      37          47

相关问题 更多 >