shift مع freq يغير تسميات الوقت في pandas، بينما استعمال shift دون freq يغير محاذاة القيم مع الصفوف. قد تبدو النتيجتان متشابهتين عند يوم مشترك، لكنهما تختلفان في الحدود وعدد القيم المحفوظة وما الذي تحرك فعلا.
الخلاصة السريعة
مع freq تتحرك تواريخ الفهرس وتبقى القيم معها؛ ودون freq، عند محور الصفوف، تتحرك محاذاة القيم داخل الفهرس الموجود.
- يعرض دليل pandas نقل القيم باستخدام shift، ويفرق ذلك عن اختيار freq الذي يغير تواريخ الفهرس مع حفظ القيم دون إعادة محاذاتها. [1]
- نؤلف قيم 7 و 11 و 13 في أيام 1 و 2 و 3 أكتوبر 2026. إزاحة صف واحد دون freq تعطي داخل الفهرس نفسه:غائبة ثم 7 ثم 11 ، فلا تبقى 13 ضمن الصفوف الثلاثة.
- إزاحة الفهرس يوما مع freq="D" تبقي 7 و 11 و 13 ، وتضعها عند أيام 2 و 3 و 4. ظهور 4 أكتوبر تسمية ناتجة من القاعدة، لا ملاحظة جديدة جمعناها.
- الصف السابق لا يعني يوما سابقا إذا كانت الأيام ناقصة. نوثق محور الإزاحة وعددها وfreq والفهرس ومعنى الغياب؛ لا تثبت أي إزاحة أن الميزة كانت متاحة أو أن التسرب منع، ولم ننفذ مكتبة.
ما الذي يتحرك في كل اختيار؟
يوضح دليل pandas أن shift ينقل محاذاة القيم، وأن اختيار freq يغير تواريخ الفهرس بدلا من إعادة محاذاة البيانات والفهرس. [1]
نحدد periods=1 ومحور الصفوف في مثالنا، ونستخدم فهرس أيام مرتبًا. لا نتناول إزاحة أعمدة الخصائص أو اختيار عدة إزاحات دفعة واحدة؛ تحديد المحور يمنع الخلط بين عمليتين تحملان الاسم نفسه.
ونقصد بالإزاحة «يوما» هنا قاعدة freq="D" على تواريخ المثال المكتوبة. لا نستنتج مدة فعلية مقاسة بين أجهزة أو تفاصيل عبور تغيير توقيت محلي؛ لم نستخدم ساعات بأسماء مناطق زمنية.
كيف تبدو إزاحة القيم داخل الفهرس؟
نؤلف ثلاث ملاحظات معلومة ونطبق قاعدة نقل كل قيمة إلى الصف التالي في الفهرس الموجود. يبقى لدينا أيام 1 و 2 و 3. يدخل 7 في صف 2 ، و 11 في صف 3 ، ولا توجد في هذا الفهرس خانة صف رابع تبقي 13.
الحالة الغائبة في اليوم الأول ناتجة من عدم وجود صف سابق في القائمة، وليست قياسا يساوي صفرًا أو معلومة أن المصدر لم يسجل شيئا في الواقع. نحتفظ بالأصل إذا احتجنا مراجعة سببها.
هذه محاذاة اشتققناها يدويًا للشرح، لا مخرجات pandas نفذناها. كما أن قيمة 7 التي تظهر عند يوم 2 لم تتغير عدديًا؛ الذي تغير هو موضعها داخل الناتج.
| يوم المثال | القيمة الأصلية | بعد إزاحة صف واحد دون freq |
|---|---|---|
| 1 أكتوبر 2026 | 7 | غائبة |
| 2 أكتوبر 2026 | 11 | 7 |
| 3 أكتوبر 2026 | 13 | 11 |
كيف تختلف إزاحة تواريخ الفهرس؟
إذا زدنا تواريخ الفهرس يوما مع freq="D" وperiods=1 ، انتقل زوج 1 أكتوبر والقيمة 7 إلى 2 أكتوبر، وزوج 2 أكتوبر و 11 إلى 3 ، وزوج 3 أكتوبر و 13 إلى 4. بقيت القيم الثلاث محفوظة.
لذلك يختلف الحد الأخير عن الجدول: يوجد يوم 4 وقيمته 13 ، ولا يوجد يوم 1 في الناتج ذي التسميات المحركة. تطابق 7 و 11 في بعض الأيام بين الطريقتين لا يجعل كامل الناتجين واحدا.
لا نعطي 13 في 4 أكتوبر معنى قيمة رصدناها في ذلك اليوم. إنها القيمة الأصلية نفسها تحت تسمية حولناها بقاعدة معلنة؛ يلزم أن يناسب هذا التحويل تعريف الحقل إذا استخدمناه في مشروع فعلي.
متى لا يعني الصف السابق اليوم السابق؟
لو حذفنا صف 2 أكتوبر من القائمة، أصبح السابق لصف 3 أكتوبر هو صف 1 ، لا يوم 2. إذن إزاحة صف واحد تعتمد ترتيب الصفوف الموجودة، ولا تنشئ يومًا غائبا أو تعوض ملاحظته تلقائيا.
نقترح حفظ الفهرس الأصلي ومحور الإزاحة وperiods وfreq وسياسة الغياب، ثم فحص أول صف وآخر صف والفواصل الموجودة. وإذا كانت الميزة ستستخدم عند قرار، نراجع توفر مصدرها بمعزل عن تحويل محاذاتها.
لم ننشئ سلسلة فعلية أو نقس أداء. المثال يحدد ما تغير في القيم والتسميات والحدود، ولا يثبت أن تعديل الفهرس إصلاح للوقت المسجل أو إجراء يمنع التسرب وحده.
المصادر ومتابعة القراءة
- pandas: Time series — Shifting / lagging (يفتح في نافذة جديدة)pandas.pydata.org
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.
