สมมติว่าคุณมี DataFrame สี่เหลี่ยมจัตุรัส (square) และต้องการแทนค่าเส้นทแยงมุม (diagonal) ด้วยค่า 1
วิธีแก้ปัญหา
- สร้าง DataFrame สี่เหลี่ยมจัตุรัส
- ใช้ nested loop วนลูป i, j ตรวจสอบ
if i == j(ตำแหน่งเส้นทแยงมุม) - แทนค่าด้วย
df.iloc[i, j] = 1
ตัวอย่างโค้ด
import pandas as pd
import numpy as np
data = [[10, 20, 30], [40, 50, 60], [70, 80, 90]]
df = pd.DataFrame(data)
print("DataFrame ต้นฉบับ:\n", df)
# แทนค่าเส้นทแยงมุมเป็น 1
for i in range(len(df)):
for j in range(len(df)):
if i == j:
df.iloc[i, j] = 1
print("\nDataFrame หลังแทนค่าเส้นทแยงมุม:")
print(df)
ผลลัพธ์
DataFrame ต้นฉบับ:
0 1 2
0 10 20 30
1 40 50 60
2 70 80 90
DataFrame หลังแทนค่าเส้นทแยงมุม:
0 1 2
0 1 20 30
1 40 1 60
2 70 80 1
คำอธิบาย:
- เส้นทแยงมุม (main diagonal) คือตำแหน่งที่ row index == column index (i == j)
- ใช้
iloc[i, j]เข้าถึงและแก้ไขค่าโดย integer position - วิธีที่เร็วกว่าสำหรับ DataFrame ใหญ่: ใช้ numpy
np.fill_diagonal(df.values, 1) - หากต้องการแทนค่า anti-diagonal (มุมตรงข้าม):
if i + j == len(df) - 1