Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python – เปรียบเทียบ Timestamp เฉพาะบางแถวใน Pandas DataFrame

ภาพรวม

เปรียบเทียบค่า Timestamp ระหว่างสองคอลัมน์ (Date_of_Purchase vs Date_of_Service) สำหรับแถวเฉพาะ (index 0, 1, 2) โดยใช้ index-based access

ตัวอย่างโค้ด


import pandas as pd

dataFrame = pd.DataFrame({
    "Car": ["Audi", "Lexus", "Tesla", "Mercedes", "BMW"],
    "Date_of_Purchase": [
        pd.Timestamp("2021-06-10"),
        pd.Timestamp("2021-07-11"),
        pd.Timestamp("2021-06-25"),
        pd.Timestamp("2021-06-29"),
        pd.Timestamp("2021-03-20")
    ],
    "Date_of_Service": [
        pd.Timestamp("2021-11-05"),
        pd.Timestamp("2021-12-03"),
        pd.Timestamp("2021-10-30"),
        pd.Timestamp("2021-11-29"),
        pd.Timestamp("2021-08-20")
    ]
})

print("DataFrame...\n", dataFrame)

# เปรียบเทียบแถวที่ 0, 1, 2 (index-based)
timestamp1_diff = abs(dataFrame['Date_of_Purchase'][0] - dataFrame['Date_of_Service'][0])
timestamp2_diff = abs(dataFrame['Date_of_Purchase'][1] - dataFrame['Date_of_Service'][1])
timestamp3_diff = abs(dataFrame['Date_of_Purchase'][2] - dataFrame['Date_of_Service'][2])

print("\nDifference Car 1 (index 0):", timestamp1_diff)
print("Difference Car 2 (index 1):", timestamp2_diff)
print("Difference Car 3 (index 2):", timestamp3_diff)

ผลลัพธ์

DataFrame...
     Car Date_of_Purchase Date_of_Service
0   Audi       2021-06-10      2021-11-05
1  Lexus       2021-07-11      2021-12-03
2  Tesla       2021-06-25      2021-10-30
3 Mercedes       2021-06-29      2021-11-29
4    BMW       2021-03-20      2021-08-20

Difference Car 1 (index 0): 148 days 00:00:00
Difference Car 2 (index 1): 145 days 00:00:00
Difference Car 3 (index 2): 127 days 00:00:00

วิธีที่ดีกว่า: Vectorized Operations

แทนที่จะเข้าถึงทีละ index ให้คำนวณทั้งคอลัมน์พร้อมกัน:


# คำนวณ diff ทุกแถว
dataFrame['Days_Between'] = (dataFrame['Date_of_Service'] - dataFrame['Date_of_Purchase']).dt.days

print(dataFrame[['Car', 'Days_Between']])
#      Car  Days_Between
# 0   Audi           148
# 1  Lexus           145
# 2  Tesla           127
# 3 Mercedes         153
# 4    BMW           153

การเข้าถึง Index ที่ถูกต้อง

  • df['col'][0] – ช้า (chained indexing) อาจได้ SettingWithCopyWarning
  • df.loc[0, 'col'] – เร็วและชัดเจน (label-based)
  • df.iloc[0]['col'] หรือ df.iloc[0, col_idx] – position-based

Absolute Difference


# ใช้ abs() บน Timedelta
diff = (df['Date_of_Service'] - df['Date_of_Purchase']).abs()
# หรือ
diff = df['Date_of_Service'].sub(df['Date_of_Purchase']).abs()