Pandas 데이터 프레임의 열을 1 위로 이동 하시겠습니까?


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

8

열 gdp 위로 이동 :

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

그런 다음 마지막 행을 제거하십시오.


4

예를 들어 5 개 값만큼 쉽게 이동하고 이동 한 값의 수를 추적 할 필요없이 NaN 행을 제거하려면 다음을 수행하십시오.

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

3
df.gdp = df.gdp.shift(-1) ## shift up
df.gdp.drop(df.gdp.shape[0] - 1,inplace = True) ## removing the last row

0

먼저 열을 이동합니다.

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

둘째, NaN 셀이 포함 된 마지막 행을 제거합니다.

df = df[:-1]

세 번째 인덱스 재설정 :

df = df.reset_index(drop=True)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.