2016-06-07 4 views
0

팬더 데이터 프레임이 있는데 'column'으로 표시된 특정 열의 계산을 기반으로하는 새 열을 추가해야합니다. numpy를 사용하여이 작업을 수행하는 방법을 찾았지만 항상 체인 된 인덱스에 대한 경고를 제공합니다. 나는 더 나은 해결책이 있어야한다고 확신합니다. 알고 계시면 도움을주십시오.pandas dataframe 다른 열의 캘리브레이션을 기반으로 새 열을 추가하고 연결 인덱스를 피하십시오

1 : 여기서 [key_site_num] I로부터 칩 ID의 데이터를 추출해야 할 열을 결정 열의 값

df_num_bin1['Chip_id_3']=np.where(df_num_bin1[key_site_num]==1,df_num_bin1[WB_89_S1]*0x100+df_num_bin1[WB_78_S1],df_num_bin1[WB_89_S2]*0x100+df_num_bin1[WB_78_S2]) 
df_num_bin1['Chip_id_2']=np.where(df_num_bin1[key_site_num]==1,df_num_bin1[WB_67_S1]*0x100+df_num_bin1[WB_56_S1],df_num_bin1[WB_67_S2]*0x100+df_num_bin1[WB_56_S2]) 
df_num_bin1['Chip_id_1']=np.where(df_num_bin1[key_site_num]==1,df_num_bin1[WB_45_S1]*0x100+df_num_bin1[WB_34_S1],df_num_bin1[WB_45_S2]*0x100+df_num_bin1[WB_34_S2]) 
df_num_bin1['Chip_id_0']=np.where(df_num_bin1[key_site_num]==1,df_num_bin1[WB_23_S1]*0x100+df_num_bin1[WB_12_S1],df_num_bin1[WB_23_S2]*0x100+df_num_bin1[WB_12_S2]) 
df_num_bin1['mac_low']=(df_num_bin1['Chip_id_1'].map(int) % 0x10000) *0x100+df_num_bin1['Chip_id_0'].map(int) // 0x1000000 

코드

상기 2 문제를 가지고있다. 이 예에서는 사이트 0 또는 1이지만 실제로는 2 또는 3 일 수도 있습니다. 나는 일반적인 해결책이 필요하다.

2 : 체인 된 색인 경고를 생성합니다.

C:\Anaconda2\lib\site-packages\ipykernel\__main__.py:35: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame. 
Try using .loc[row_indexer,col_indexer] = value instead 

답변

0

글쎄, 나는 당신의 첫 번째 퀘스트에 대해 너무 확신하지 못하지만, 이것이 당신을 도울 것이라고 생각합니다.

import pandas as pd 
reader = pd.read_csv(path,engine='python') 
reader['new'] = reader['treasury.maturity.rate']+reader['bond.yield'] 
reader.to_csv('test.csv',index=False) 

볼 수 있듯이, 조작하기 전에 값을 가져올 필요가 없습니다. 특정 행에 대해서만 동일한 작업을 수행하려면 새 열을 만들기 전에 데이터 프레임을 필터링 할 수 있습니다.

관련 문제