问题

我有一个包含多列和行的数据库.我想在满足列子集的某些标准的数据库行中找到,如果满足该标准,则更改该行中不同列的值.

我正在使用以下数据库进行原型 "`

 df = pd.DataFrame([[1, 2], [4, 5], [5, 5], [5, 9], [55, 55]], columns=['max_speed', 'shield'])
df['frcst_stus'] = 'current'
df
 

"` 这给出了以下结果:

 max_speed   shield  frcst_stus
0   1   2   current
1   4   5   current
2   5   5   current
3   5   9   current
4   55  55  current
 

我想更改索引行2来读取5,5,’hello’而不更改数据帧的其余部分.

我可以在设置值时执行Pandas.loc文档中的示例.我可以设置与可调用条件匹配的行,列和行.但调用在单列或系列上.我想要两个.

我找到了一些stackoverflow答案,它们使用loc在一个列上设置第二列中的值来回答问题.这不是我的问题.我想搜索两列数据.

以下允许我得到我想要的行: "`

 result = df[(df['shield'] == 5) & (df['max_speed'] == 5) & (df['frcst_stus'] == 'current')]
 

"` 我知道只是将等号(===’current’)更改为(=’current’)会给我一个错误.

当我在两列上选择时,我可以设置列(见下文),但两列都设置. (‘arghh’),当我尝试测试’max_require’的值时,我得到一个false不在索引错误中. "` df.loc [:,[‘max_require’,’frcst_stus’]] =’hello’

"`

我也收到一个错误,试图用Python解释布尔问题.坦率地说,我还不明白整个超载.

我正在尝试遵守格式化要求,如果我尖叫Stackoverflow的格式要求,请告诉我.

  最佳答案

如果需要通过掩码m将不同的值设置为两列:

 m = (df['shield'] == 5) & (df['max_speed'] == 5) & (df['frcst_stus'] == 'current')

df.loc[m, ['max_speed', 'frcst_stus']] = [100, 'hello']
 

如果需要通过掩码m将相同的值设置为两列:

 df.loc[m, ['max_speed', 'frcst_stus']] = 'hello'
 

如果需要通过掩码m只设置一列:

 df.loc[m, 'frcst_stus'] = 'hello'
 

  相同标签的其他问题

pandasloc