使用.loc在DataFrames中设置值

时间:2019-06-26 03:16:10

标签: python pandas dataframe

我有一个配置,使用loc和iloc的组合来修改数据框的值非常有用。

df = pd.DataFrame([[1,2],[1,3],[1,4],[2,6],[2,5],[2,7]],columns=['A','B'])

基本上,在上面的数据框中,我只想获取等于某个值(即A = 2)的列。会给出:

   A  B
3  2  6
4  2  5
5  2  7

然后修改第二个索引的B的值(在这种情况下,实际上是索引4) 我可以使用以下命令访问所需的值:

df.loc[df['A'] == 2,'B'].iat[1]

(或.iloc而不是.iat,但我听说要更改很多单行,iat会更快)

它产生了我:5

但是我似乎无法使用同一命令对其进行修改:

df.loc[df['A'] == 2,'B'].iat[1] = 0 

它给了我:

   A  B
0  1  2
1  1  3
2  1  4
3  2  6
4  2  5
5  2  7

我想要这个:

   A  B
0  1  2
1  1  3
2  1  4
3  2  6
4  2  0
5  2  7

谢谢!

2 个答案:

答案 0 :(得分:2)

我们不应链接.loc.ilociatat

df.loc[df.index[df.A==2][1],'B']=0
df
   A  B
0  1  2
1  1  3
2  1  4
3  2  6
4  2  0
5  2  7

答案 1 :(得分:0)

您可以使用cumsum来计算实例数:

s = df['A'].eq(2)

df.loc[s & s.cumsum().eq(2), 'B'] = 0

输出:

   A  B
0  1  2
1  1  3
2  1  4
3  2  6
4  2  0
5  2  7