เลื่อนคอลัมน์ในดาต้าเฟรมของแพนด้าขึ้นทีละคอลัมน์?


90

ฉันมีดาต้าเฟรมแพนด้า ฉันต้องการ 'ล่าช้า' หนึ่งในคอลัมน์ของฉัน ความหมายตัวอย่างเช่นการเลื่อนทั้งคอลัมน์ 'gdp' ขึ้นทีละคอลัมน์จากนั้นลบข้อมูลส่วนเกินทั้งหมดที่ด้านล่างของแถวที่เหลือเพื่อให้คอลัมน์ทั้งหมดมีความยาวเท่ากันอีกครั้ง

df =
    y  gdp  cap
0   1    2    5
1   2    3    9
2   8    7    2
3   3    4    7
4   6    7    7

df_lag =
    y  gdp  cap
0   1    3    5
1   2    7    9
2   8    4    2
3   3    7    7

จะทำยังไงต่อไป?

คำตอบ:


159
In [44]: df['gdp'] = df['gdp'].shift(-1)

In [45]: df
Out[45]: 
   y  gdp  cap
0  1    3    5
1  2    7    9
2  8    4    2
3  3    7    7
4  6  NaN    7

In [46]: df[:-1]                                                                                                                                                                                                                                                                                                               
Out[46]: 
   y  gdp  cap
0  1    3    5
1  2    7    9
2  8    4    2
3  3    7    7

1
เพียงใช้df.dropna()และมันจะทิ้งแถว NaN ทั้งหมดโดยที่คุณไม่ต้องระบุจำนวนแถวที่จะดรอป
ArmandduPlessis


4

ในการเปลี่ยนค่า 5 ค่าได้อย่างง่ายดายเช่นและกำจัดแถว NaN โดยไม่ต้องติดตามจำนวนค่าที่คุณเลื่อนโดย:

d['gdp'] = df['gdp'].shift(-5)
df = df.dropna()


0

ขั้นแรกเลื่อนคอลัมน์:

df['gdp'] = df['gdp'].shift(-1)

ประการที่สองลบแถวสุดท้ายซึ่งมี NaN Cell:

df = df[:-1]

สามรีเซ็ตดัชนี:

df = df.reset_index(drop=True)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.