如何基于列行拆分数据框

时间:2019-09-18 09:42:50

标签: python-3.x pandas numpy

我有一个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

3 个答案:

答案 0 :(得分:2)

考虑到您的列名是col,您可以首先将数据框分组,在col上将cumsum乘以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

答案 1 :(得分:1)

使用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:]

答案 2 :(得分:0)

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

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)