Pandas数据框根据其他列的计算添加新列,避免链式索引

2024-07-05 14:10:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框架,我需要添加一个新的列,这将是基于特定列的计算,由列'网站'表示。我已经找到了一种方法来使用numpy来实现这一点,但它总是对链接索引发出警告。我相信应该有更好的解决办法,如果你知道的话请帮忙。你知道吗

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

上述代码有两个问题:

1:这里[key\u site\u 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

Tags: 数据keyid警告df链接npsite
1条回答
网友
1楼 · 发布于 2024-07-05 14:10:48

嗯,我不太确定你的第一个任务,但我认为这将帮助你。你知道吗

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)

如您所见,您不需要在操作之前获取值,只引用它们所在的列;要仅对特定行执行相同操作,您可以在创建新列之前过滤数据帧。你知道吗

相关问题 更多 >