2016-06-07 82 views
0

我有一個熊貓數據框,我需要添加一個新列,這個列將基於特定列的計算,由列'site'指示。我已經找到了一種方法來做到這一點,訴諸numpy,但它總是警告鏈接索引。我相信應該有更好的解決方案,請幫助,如果你知道。pandas dataframe在其他列上添加新列,並避免鏈接索引

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個問題:

1:在此列的值[key_site_num]確定哪些列我應該從提取芯片ID的數據。在這個例子中,它只是站點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

那麼,我不太瞭解你的第一個任務,但我認爲這會幫助你。你可以看到,在操作它們之前你不需要獲取值,只需引用它們所在的列;並且只對特定的行執行相同的操作,您可以在創建新列之前過濾數據框。

相關問題