แยกแถวดาต้าเฟรมของแพนด้าขึ้นเพื่อค้นหาค่าคอลัมน์ลงในดาต้าเฟรมใหม่

ฉันมี dataframe ที่ประกอบด้วยแถวส่วนหัวหลายแถว (การรวมกันของหลาย csvs) มีวิธีแยก dataframe กลับเป็น dataframe แต่ละรายการโดยไม่ต้องใช้ .iloc หรือไม่ iloc ใช้งานได้ แต่จะใช้เวลานานสำหรับขั้นตอนการทำงานของฉัน

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:,]

มีวิธีที่ดีกว่าในการแบ่ง data frame โดยการค้นหาค่าในคอลัมน์หรือไม่? เช่นบางอย่างเช่น df1,df2,df3 = df.split(df['A']=='A')


person Cody Glickman    schedule 05.11.2020    source แหล่งที่มา


คำตอบ (1)


คุณสามารถใช้ eq เพื่อตรวจสอบแถวส่วนหัว จากนั้นจัดกลุ่มตาม cumsum:

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

ตัวอย่างเช่น dfs[0] ให้:

   A  B
0  1  9
1  2  8
2  3  7
person Quang Hoang    schedule 05.11.2020
comment
ขอบคุณ @Quang Hoang มันใช้งานได้ดี! ฉันขอขอบคุณการตอบสนองที่รวดเร็ว - person Cody Glickman; 06.11.2020