パンダデータフレームの列を1つ上にシフトしますか?


90

パンダのデータフレームがあります。列の1つを「遅らせ」たい。つまり、たとえば、列全体 'gdp'を1つ上にシフトし、残りの行の下部にある余分なデータをすべて削除して、すべての列が再び同じ長さになるようにします。

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

8

列のGDPを上にシフト:

df.gdp = df.gdp.shift(-1)

最後の行を削除します


4

たとえば、5つの値だけ簡単にシフトし、シフトした値の数を追跡することなく、NaN行を削除するには:

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


0

最初に列をシフトします。

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

次に、NaNセルを含む最後の行を削除します。

df = df[:-1]

3番目にインデックスをリセットします。

df = df.reset_index(drop=True)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.