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