2016-10-31 3 views
1

저는 프로그래밍에 익숙하지 않고 루프를 사용하여 팬더 데이터 프레임에서 변수를 코드화 할 때 제가 도움을 얻을 수 있기를 바랍니다.파이썬에서 변수를 recode하기위한 루핑

팬더 데이터 프레임의 여러 열을 초 단위에서 분 단위로 다시 코딩하고 싶습니다. 파이썬에서 간단한 함수를 작성한 다음 작동하는 각 열에서 복사하고 반복 할 수 있지만 이것을 자동화하고 싶습니다. 도움에 감사드립니다.

ivf.secondsUntilCC.xxx 컬럼에는 무언가 일어날 때까지의 시간 (초)이 들어 있습니다. 새 열 ivf.minsUntilCC.xxx를 분으로 지정합니다. 데이터 프레임 이름은 데이터입니다.

def f(x,y): 
    return x[y]/60 

data['ivf.minsUntilCC.500'] = f(data,'ivf.secondsUntilCC.500') 

data['ivf.minsUntilCC.1000'] = f(data,'ivf.secondsUntilCC.1000') 

data['ivf.minsUntilCC.2000'] = f(data,'ivf.secondsUntilCC.2000') 

data['ivf.minsUntilCC.3000'] = f(data,'ivf.secondsUntilCC.3000') 

data['ivf.minsUntilCC.4000'] = f(data,'ivf.secondsUntilCC.4000') 

답변

0

내가 벡터화 된 접근 방식 사용합니다 :

In [27]: df 
Out[27]: 
     X ivf.minsUntilCC.500 ivf.minsUntilCC.1000 ivf.minsUntilCC.2000 ivf.minsUntilCC.3000 ivf.minsUntilCC.4000 
0 191365    906395    854268    701859    979647    914942 
1 288577    300394    577555    880370    924162    897984 
2 66705    493545    232603    682509    794074    204429 
3 747828    504930    379035     29230    410390    287327 
4 926553    913360    657640    336139    210202    356649 

In [28]: df.loc[:, df.columns.str.startswith('ivf.minsUntilCC.')] /= 60 

In [29]: df 
Out[29]: 
     X ivf.minsUntilCC.500 ivf.minsUntilCC.1000 ivf.minsUntilCC.2000 ivf.minsUntilCC.3000 ivf.minsUntilCC.4000 
0 191365   15106.583333   14237.800000   11697.650000   16327.450000   15249.033333 
1 288577   5006.566667   9625.916667   14672.833333   15402.700000   14966.400000 
2 66705   8225.750000   3876.716667   11375.150000   13234.566667   3407.150000 
3 747828   8415.500000   6317.250000   487.166667   6839.833333   4788.783333 
4 926553   15222.666667   10960.666667   5602.316667   3503.366667   5944.150000 

설정 :

df = pd.DataFrame(np.random.randint(0,10**6,(5,6)), 
        columns=['X','ivf.minsUntilCC.500', 'ivf.minsUntilCC.1000', 
          'ivf.minsUntilCC.2000', 'ivf.minsUntilCC.3000', 
          'ivf.minsUntilCC.4000']) 

설명 :

In [26]: df.loc[:, df.columns.str.startswith('ivf.minsUntilCC.')] 
Out[26]: 
    ivf.minsUntilCC.500 ivf.minsUntilCC.1000 ivf.minsUntilCC.2000 ivf.minsUntilCC.3000 ivf.minsUntilCC.4000 
0    906395    854268    701859    979647    914942 
1    300394    577555    880370    924162    897984 
2    493545    232603    682509    794074    204429 
3    504930    379035     29230    410390    287327 
4    913360    657640    336139    210202    356649 
관련 문제