基于另一列的值更新列

2024-09-28 23:20:36 发布

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

我有这样一个数据帧:

  HNCO_iloc    C_shift HNcoCA_iloc CA_shift i_FROM  i_TO
0        25  180.40469        None     None     36  None
0        70  179.52209        None     None     46  None
0       137  178.47112        None     None     49  None
0       157  178.35808        None     None     36  None
0       204  177.14190        None     None     32  None
0       221  176.99482        None     None     26  None
0       261  176.12322        None     None     16  None
0       269  176.08582        None     None     36  None
0       270  176.09042        None     None     36  None
0       313  175.27206        None     None     24  None
0       322  175.18865        None     None     31  None
0       332  174.78010        None     None     43  None
0       342  174.34505        None     None     45  None
0       352  173.76740        None     None      1  None
0       358  173.46177        None     None      3  None
0       363  172.97259        None     None      3  None

我希望能够使用“I_FROM”中的值访问“CA_shift”列,并更新该单元格。因此,例如,如果我想将I_从等于3的行更改为3,我希望得到以下输出:

  HNCO_iloc    C_shift HNcoCA_iloc CA_shift i_FROM  i_TO
0        25  180.40469        None     None     36  None
0        70  179.52209        None     None     46  None
0       137  178.47112        None     None     49  None
0       157  178.35808        None     None     36  None
0       204  177.14190        None     None     32  None
0       221  176.99482        None     None     26  None
0       261  176.12322        None     None     16  None
0       269  176.08582        None     None     36  None
0       270  176.09042        None     None     36  None
0       313  175.27206        None     None     24  None
0       322  175.18865        None     None     31  None
0       332  174.78010        None     None     43  None
0       342  174.34505        None     None     45  None
0       352  173.76740        None     None      1  None
0       358  173.46177        None     test      3  None
0       363  172.97259        None     test      3  None

现在我正在做:

connectivity_df.loc[connectivity_df['i_FROM' == 3], 'CA_shift'] = 'test'

但是我不断地得到KeyErrors


Tags: to数据fromtestnonedfshiftloc
1条回答
网友
1楼 · 发布于 2024-09-28 23:20:36

你可以用np.where()来解决这个问题。守则如下:

df = pd.DataFrame({'CA_shift':[None,None,None,None,None,None],'i_FROM':[36,46,49,36,3,3]})

第1种情况:一对一替换:

example_value = 3
df['CA_shift'] = np.where(df['i_FROM'] == example_value,'test',df['CA_shift'])

输出:

  CA_shift  i_FROM
0     None      36
1     None      46
2     None      49
3     None      36
4     test       3
5     test       3

此操作以向量化的方式工作,就像if语句一样,如果行的值与example_value匹配,它将更新为test,否则它将返回CA_shift的原始值

第二种情况:多对一替换:

mult_values = [3,46,49]
df['CA_shift'] = np.where(df['i_FROM'].isin(mult_values),'test',df['CA_shift'])
print(df)

输出:

  CA_shift  i_FROM
0     None      36
1     test      46
2     test      49
3     None      36
4     test       3
5     test       3

第三种情况:更换多对多:

mult_values = [3,46,49]
conditions = [df['i_FROM']==mult_values[0],df['i_FROM']==mult_values[1],df['i_FROM']==mult_values[2]]
choices = ['test1','test2','test3']
df['CA_shift'] = np.select(conditions,choices,default=df['CA_shift'])
print(df)

输出:

  CA_shift  i_FROM
0        0      36
1    test2      46
2    test3      49
3        0      36
4    test1       3
5    test1       3

相关问题 更多 >