在数据帧上迭代loc

2024-09-27 02:15:27 发布

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

我试图从数据帧列表中提取数据并提取行范围。每个数据帧可能不具有相同的数据,因此我有一个可能的索引范围列表,我希望loc循环,即从下面的代码示例中,我可能希望CIN到LAN,但在另一个数据帧上,CIN行不存在,因此我希望DET到LAN或HOU到LAN。你知道吗

所以我想把它们放在一个列表中,然后在列表上迭代,也就是说

for df in dfs: ranges=[[df.loc["CIN":"LAN"]], [df.loc["DET":"LAN"]]] extracted ranges = (i for i in ranges)

我不确定您将如何遍历一个列表并将其馈送到loc,或者.query()。你知道吗

  df1        stint    g    ab    r    h  X2b  X3b  hr    rbi    sb   cs   bb  \
year team                                                                    
2007 CIN       6  379   745  101  203   35    2  36  125.0  10.0  1.0  105   
     DET       5  301  1062  162  283   54    4  37  144.0  24.0  7.0   97   
     HOU       4  311   926  109  218   47    6  14   77.0  10.0  4.0   60   
     LAN      11  413  1021  153  293   61    3  36  154.0   7.0  5.0  114   
     NYN      13  622  1854  240  509  101    3  61  243.0  22.0  4.0  174   
     SFN       5  482  1305  198  337   67    6  40  171.0  26.0  7.0  235   
     TEX       2  198   729  115  200   40    4  28  115.0  21.0  4.0   73   
     TOR       4  459  1408  187  378   96    2  58  223.0   4.0  2.0  190   

  df2           so   ibb   hbp    sh    sf  gidp  
year team                                       
2008 DET   176.0   3.0  10.0   4.0   8.0  28.0  
     HOU   212.0   3.0   9.0  16.0   6.0  17.0  
     LAN   141.0   8.0   9.0   3.0   8.0  29.0  
     NYN   310.0  24.0  23.0  18.0  15.0  48.0  
     SFN   188.0  51.0   8.0  16.0   6.0  41.0  
     TEX   140.0   4.0   5.0   2.0   8.0  16.0  
     TOR   265.0  16.0  12.0   4.0  16.0  38.0  

Tags: 数据indf列表foryearlocteam
1条回答
网友
1楼 · 发布于 2024-09-27 02:15:27

这里有一个解决方案:

    import pandas as pd

    # Prepare a list of ranges
    ranges = [('CIN','LAN'), ('DET','LAN')]

    # Declare an empty list of data frames and a list with the existing data frames
    df_ranges = []
    df_list = [df1, df2]

    # Loop over multi-indices
    for i, idx_range in enumerate(ranges):
        df = df_list[i]
        row1, row2 = idx_range
        df_ranges.append(df.loc[(slice(None), slice(row1, row2)),:])

    # Print the extracted data
    print('Extracted data:\n')
    print(df_ranges)

输出:

    [           stint    g    ab    r    h  X2b  X3b  hr  rbi  sb  cs   bb
    year team                                                            
    2007 CIN       6  379   745  101  203   35    2  36  125  10   1  105
         DET       5  301  1062  162  283   54    4  37  144  24   7   97
         HOU       4  311   926  109  218   47    6  14   77  10   4   60
         LAN      11  413  1021  153  293   61    3  36  154   7   5  114 

                so  ibb  hbp  sh  sf  gidp
    year team                             
    2008 DET   176    3   10   4   8    28
         HOU   212    3    9  16   6    17
         LAN   141    8    9   3   8    29]

相关问题 更多 >

    热门问题