如何通过特定条件,特定列和特定行更新数据框中的值?

时间:2018-02-19 01:28:22

标签: python pandas

我正在尝试更新此选择器中的值(在循环中):

 df.loc[df['wsid']==w,col_name].iloc[int(lag)]

重建一个例子(在循环内),将是:

 df.loc[df['wsid']==329,'stp_1'].iloc[0]

我可以打印该值,但我不知道如何更新它:

df.loc[df['wsid']==329,'stp_1'].iloc[0] = 0  ??

2 个答案:

答案 0 :(得分:1)

这应该有效:

idx = df.loc[df['wsid']==w].index
df.loc[df.loc[idx, 'wsid'].index[0], 'wsid'] = 0

<强>解释

  • .loc访问器可用于切片和设置数据帧的各个部分。
  • 它接受df.loc[index_labels, column_name]形式的输入。有关详细信息,请参阅Selection by Label
  • 仅针对您指定的数据子集提取索引。

答案 1 :(得分:0)

您似乎只想根据某些条件更新数据框中的某个单元格。

这是设置 -

df = pd.DataFrame({'col' : np.arange(3, 13)})
df

   col
0    3
1    4
2    5
3    6
4    7
5    8
6    9
7   10
8   11
9   12

现在,假设您要查找可被3整除的记录。但是,您只想更新与此条件匹配的第一个项目。在这种情况下,您可以使用idxmax

m = df.col.mod(3).eq(0)    
df.loc[m.idxmax(), 'col'] = 0

df

   col
0    0     # first item matching condition updated
1    4
2    5
3    6
4    7
5    8
6    9
7   10
8   11
9   12

另一方面,如果它是第一个索引之外的任何东西,你需要更多一些参与。例如,在符合条件的第三行中。

i = 3
df.loc[m.mask(~m).dropna().index[i], 'col'] = 0

df

   col
0    3
1    4
2    5
3    6
4    7
5    8
6    9
7   10
8   11
9    0     # third item matching condition updated