【问题标题】:How to split dataframe on based on columns row如何根据列行拆分数据框
【发布时间】:2019-09-18 09:42:50
【问题描述】:

我有一个 excel 文件,数据框有 20 行。几行之后又有列名行,我想根据列名行划分数据框。

这是一个例子:

x
0
1
2
3
4
x
23
34
5
6

预期输出是:

df1
x
0
1
2
3
4
df2
x
23
34
5
6

【问题讨论】:

    标签: python python-3.x pandas numpy


    【解决方案1】:

    考虑到您的列名是 col ,您可以首先将数据框分组为 cumsumcol 上,其中值等于 x 通过 df['col'].eq('x').cumsum() ,然后为每个组创建一个数据框,采用该组第二行的值和列作为该组的第一个值,使用df.iloc[] 并将它们保存在字典中:

    d={f'df{i}':pd.DataFrame(g.iloc[1:].values,columns=g.iloc[0].values) 
                       for i,g in df.groupby(df['col'].eq('x').cumsum())}
    

    print(d['df1'])
     x
    0  0
    1  1
    2  2
    3  3
    4  4
    
    print(d['df2'])
        x
    0  23
    1  34
    2   5
    3   6
    

    【讨论】:

      【解决方案2】:

      使用df.index[df['x'] == 'x'] 查找列名再次出现的行索引。 然后,根据找到的索引将数据帧分成2份

      df = pd.DataFrame(columns=['x'], data=[[0], [1], [2], [3], [4], ['x'], [23], [34], [5], [6]])
      
      df1 = df.iloc[:df.index[df['x'] == 'x'].tolist()[0]]
      df2 = df.iloc[df.index[df['x'] == 'x'].tolist()[0]+1:]
      

      【讨论】:

        【解决方案3】:

        你没有提到这是你的数据集的样本。那么你可以试试这个

        import pandas as pd 
        
        df1 = []
        df2 = []
        
        df1 = pd.DataFrame({'df1': ['x', 0, 1, 2, 3, 4]})
        
        df2 = pd.DataFrame({'df2': ['x', 23, 34, 5, 6]})
        
        display(df1, df2)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-11
          • 1970-01-01
          • 2021-03-12
          • 2020-01-08
          • 1970-01-01
          • 2018-08-14
          • 2015-11-14
          • 1970-01-01
          相关资源
          最近更新 更多