bestsource

Pandas DataFrame에서 열을 이동하는 방법

bestsource 2023. 9. 11. 21:54
반응형

Pandas DataFrame에서 열을 이동하는 방법

팬더의 칼럼을 이동하고 싶습니다.DataFrame, 전체 DF를 다시 작성하지 않고서는 문서에서 할 수 있는 방법을 찾을 수 없었습니다.할 줄 아는 사람?데이터 프레임:

##    x1   x2
##0  206  214
##1  226  234
##2  245  253
##3  265  272
##4  283  291

원하는 출력:

##    x1   x2
##0  206  nan
##1  226  214
##2  245  234
##3  265  253
##4  283  272
##5  nan  291
In [18]: a
Out[18]: 
   x1  x2
0   0   5
1   1   6
2   2   7
3   3   8
4   4   9

In [19]: a['x2'] = a.x2.shift(1)

In [20]: a
Out[20]: 
   x1  x2
0   0 NaN
1   1   5
2   2   6
3   3   7
4   4   8

사용하셔야 합니다.df.shift여기서.
df.shift(i)전체 데이터 프레임을 다음과 같이 이동합니다.i아래쪽으로

그래서 일단은.i = 1:

입력:

    x1   x2  
0  206  214  
1  226  234  
2  245  253  
3  265  272    
4  283  291

출력:

    x1   x2
0  Nan  Nan   
1  206  214  
2  226  234  
3  245  253  
4  265  272 

따라서 이 스크립트를 실행하여 예상 출력을 가져옵니다.

import pandas as pd

df = pd.DataFrame({'x1': ['206', '226', '245',' 265', '283'],
                   'x2': ['214', '234', '253', '272', '291']})

print(df)
df['x2'] = df['x2'].shift(1)
print(df)

예에서 데이터 프레임을 정의합니다.

>>> df = pd.DataFrame([[206, 214], [226, 234], [245, 253], [265, 272], [283, 291]], 
    columns=[1, 2])
>>> df
     1    2
0  206  214
1  226  234
2  245  253
3  265  272
4  283  291

그런 다음 두 번째 열의 인덱스를 다음과 같이 조작할 수 있습니다.

>>> df[2].index = df[2].index+1

그리고 마지막으로 단일 열을 다시 입력합니다.

>>> pd.concat([df[1], df[2]], axis=1)
       1      2
0  206.0    NaN
1  226.0  214.0
2  245.0  234.0
3  265.0  253.0
4  283.0  272.0
5    NaN  291.0

아마도 빠르지는 않지만 간단하게 읽을 수 있습니다.열 이름과 필요한 실제 이동에 대한 변수 설정을 고려합니다.

편집: 일반적으로 다음과 같이 이동이 가능합니다.df[2].shift(1)그러나 이미 게시된 것처럼 이월이 끊어질 것입니다.

데이터 프레임의 끝을 지나 이동하는 열을 잃지 않으려면 먼저 필요한 숫자를 추가하기만 하면 됩니다.

    offset = 5
    DF = DF.append([np.nan for x in range(offset)])
    DF = DF.shift(periods=offset)
    DF = DF.reset_index() #Only works if sequential index

수입품인 것 같습니다.

import pandas as pd
import numpy as np

먼저 새 행 추가NaN, NaN,...DataFrame(데이터프레임) 끝에df).

s1 = df.iloc[0]    # copy 1st row to a new Series s1
s1[:] = np.NaN     # set all values to NaN
df2 = df.append(s1, ignore_index=True)  # add s1 to the end of df

그것은 새로운 DFdf2를 만들어 낼 것입니다.더 우아한 방법이 있을지도 모르지만 이 방법은 효과가 있습니다.

이제 이동할 수 있습니다.

df2.x2 = df2.x2.shift(1)  # shift what you want

팬더 독에서 발견한 당신의 것과 유사한 개인적인 문제에 답하려고 노력하는 중에 이 질문에 대답할 수 있을 것 같습니다.

데이터 프레임.shift(shift=1, freq=Axis, axis=0) 원하는 주기 수로 Shift 인덱스(옵션 시간 freq)

메모들

freq가 지정된 경우 인덱스 값은 이동되지만 데이터는 재정렬되지 않습니다.즉, 이동할 때 인덱스를 확장하고 원본 데이터를 보존하려면 freq를 사용합니다.

이 문제에 대한 향후 질문에 도움이 되기를 바랍니다.

df3

    1   108.210 108.231
2   108.231 108.156
3   108.156 108.196
4   108.196 108.074
... ... ...
2495    108.351 108.279
2496    108.279 108.669
2497    108.669 108.687
2498    108.687 108.915
2499    108.915 108.852

df3['yo'] = df3['yo'].shift(-1)

    yo  price
0   108.231 108.210
1   108.156 108.231
2   108.196 108.156
3   108.074 108.196
4   108.104 108.074
... ... ...
2495    108.669 108.279
2496    108.687 108.669
2497    108.915 108.687
2498    108.852 108.915
2499    NaN 108.852

이렇게 하면 됩니다.

df_ext = pd.DataFrame(index=pd.date_range(df.index[-1], periods=8, closed='right'))
df2 = pd.concat([df, df_ext], axis=0, sort=True)
df2["forecast"] = df2["some column"].shift(7)

기본적으로 나는 원하는 인덱스를 가진 빈 데이터 프레임을 생성하고 그들을 연결하는 것입니다.하지만 저는 이것을 팬더의 기본 특징으로 보고 싶어서 팬더에게 개선을 제안했습니다.

저는 팬더를 처음 접하는 사람이고, 질문을 이해하지 못할 수도 있지만, 이 해결책은 제 문제에 효과가 있었습니다.

# Shift contents of column 'x2' down 1 row
df['x2'] = df['x2'].shift()

또는 'x2' 내용이 1행 아래로 이동된 새 열을 작성하려면

# Create new column with contents of 'x2'  shifted down 1 row
df['x3'] = df['x2'].shift()

이를 파악하는 동안 시프트() 공식 문서를 읽었지만, 저에게는 별 의미가 없으며, 이 특정 행동을 참조하는 예도 없습니다.

열 'x2'의 마지막 행은 데이터 프레임의 끝에서 효과적으로 밀려납니다.시프트()가 이 동작을 변경할 수 있는 플래그를 가질 것으로 예상했지만 아무것도 찾을 수 없습니다.

언급URL : https://stackoverflow.com/questions/10982089/how-to-shift-a-column-in-pandas-dataframe

반응형