Pisahkan baris kerangka data panda hingga nilai kolom yang dicari ke dalam kerangka data baru

Saya memiliki kerangka data yang berisi beberapa baris header (kombinasi beberapa csvs). Apakah ada cara untuk membagi kerangka data kembali menjadi kerangka data individual tanpa menggunakan .iloc? iloc berfungsi, tetapi akan memakan waktu untuk alur kerja saya.

data = {'A':  [1,2,3,'A',4,5,6,'A',7,8,9],
        'B': [9,8,7,'B',6,5,4,'B',3,2,1]}
df = pd.DataFrame(data, columns = ['A','B'])

## My current approach:
df1 = df.iloc[:3,]
df2 = df.iloc[4:7,]
df3 = df.iloc[8:,]

Apakah ada cara yang lebih baik untuk membagi bingkai data dengan mencari nilai di kolom? yaitu sesuatu seperti df1,df2,df3 = df.split(df['A']=='A')


person Cody Glickman    schedule 05.11.2020    source sumber


Jawaban (1)


Seseorang dapat menggunakan eq untuk memeriksa baris header, lalu mengelompokkannya berdasarkan cumsum:

header_rows = df.eq(df.columns).all(1)
dfs = {k:v for k,v in df[~header_rows].groupby(header_rows.cumsum())}

lalu, misalnya dfs[0] memberi:

   A  B
0  1  9
1  2  8
2  3  7
person Quang Hoang    schedule 05.11.2020
comment
Terima kasih @Quang Hoang, ini berfungsi dengan baik! Saya menghargai respons yang cepat. - person Cody Glickman; 06.11.2020