Pandas DataFrame에서 열을 이동하는 방법
Pandas에서 열을 이동하고 DataFrame
싶지만 전체 DF를 다시 작성하지 않고 문서에서 수행하는 방법을 사용할 수 없습니다. 누구든지 그것을하는 방법을 알고 있습니까? DataFrame :
## 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
데이터 프레임의 끝을 지나 이동 한 열을 잃지 않고 먼저 필요한 번호를 추가하면됩니다.
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
여기서 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)
나는 수입을 생각한다
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
새로운 DF df2가 생성됩니다. 더 우아한 방법이 작동합니다.
이제 방송 수 있습니다.
df2.x2 = df2.x2.shift(1) # shift what you want
예제에서 데이터 프레임을 정의 할 수 있습니다.
>>> 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)
으로 이미 게시 된 대로 이동이 가능 하지만 이월을 차단합니다.
개인적인 문제에 답하려고 노력 중이며 Pandas Doc 에서이 질문에 답할 것이라고 생각하는 것과 비슷한 것을 찾았습니다 .
DataFrame.shift (periods = 1, freq = None, axis = 0) 선택적 시간 주파수를 사용하여 원하는 기간 수만큼 인덱스 이동
메모
freq가 지정되면 인덱스 값이 이동되지만 데이터는 다시 정렬되지 않습니다. 즉, 원래 데이터를 이동하고 보존 할 때 인덱스를 확장하려면 freq를 사용하십시오.
이 문제에 대한 향후 질문에 도움이되기를 바랍니다.
이것이 내가하는 방법입니다.
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)
기본적으로 원하는 인덱스가있는 빈 데이터 프레임을 생성 한 다음 함께 연결합니다. 그러나 나는 이것을 pandas의 표준 기능으로보고 싶기 때문에 pandas에 대한 개선 사항 을 제안했습니다 .
참고 URL : https://stackoverflow.com/questions/10982089/how-to-shift-a-column-in-pandas-dataframe
'IT' 카테고리의 다른 글
SVG 이미지를 확장하여 브라우저 창을 채우는 방법은 무엇입니까? (0) | 2020.09.16 |
---|---|
작동하지 않는 경우 내부 Windows 일괄 설정 (0) | 2020.09.16 |
두 개의 다른 데이터베이스 테이블에 조인을 사용할 수 있습니까? (0) | 2020.09.16 |
Java와 같은 C #에 키워드가 있습니까? (0) | 2020.09.16 |
함수를 호출 할 때 "예외 발생"이 필요한 이유는 무엇입니까? (0) | 2020.09.16 |