我有一个包含多个列和行的数据库。我想在数据库中找到满足列子集特定条件的行,如果满足该条件,则更改同一行中不同列的值。
我正在使用以下数据库进行原型制作 '''
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_speed'的值时,我得到的错误不是索引错误。 ''' df.loc [:, ['max_speed','frcst_stus']] ='hello'
'''
在解释Python的布尔值问题时,我也遇到错误。坦白说,我只是还不了解整个超载。
我正在尝试遵守格式要求,如果我搞砸了Stackoverflow的格式要求,请告诉我。
答案 0 :(得分:1)
如果需要通过掩码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'