使用 loc 在 pandas 数据框中设置值 - 多个选择条件允许在不同列中设置值
setting values in a pandas dataframe using loc - multiple selection criteria allowing setting value in a different column
我有一个包含多列和多行的数据库。我想在数据库中找到满足列子集的特定条件的行,如果满足该条件,则更改同一行中不同列的值。
我正在使用以下数据库制作原型
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 文档中的示例。我可以设置匹配可调用条件的行、列和行。但是调用是针对单个列或系列的。我要两个。
而且我找到了许多 Whosebug 答案,这些答案使用 loc 在单个列上设置第二列中的值来回答这个问题。那不是我的问题。我想搜索两列数据。
以下允许我得到我想要的行:
result = df[(df['shield'] == 5) & (df['max_speed'] == 5) & (df['frcst_stus'] == 'current')]
而且我知道只要将等号 (== 'current') 更改为 (= 'current') 就会出错。
当我在两列上 select 时,我可以设置列(见下文),但两列都已设置。 ('arghh') 当我尝试测试 'max_speed' 的值时,我得到一个 false is not in index 错误。
df.loc[:, ['max_speed', 'frcst_stus']] = 'hello'
我在尝试用 Python 解释布尔问题时也遇到了错误。坦率地说,我只是还不明白整个重载。
如果需要通过掩码为两列设置不同的值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'
我有一个包含多列和多行的数据库。我想在数据库中找到满足列子集的特定条件的行,如果满足该条件,则更改同一行中不同列的值。
我正在使用以下数据库制作原型
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 文档中的示例。我可以设置匹配可调用条件的行、列和行。但是调用是针对单个列或系列的。我要两个。
而且我找到了许多 Whosebug 答案,这些答案使用 loc 在单个列上设置第二列中的值来回答这个问题。那不是我的问题。我想搜索两列数据。
以下允许我得到我想要的行:
result = df[(df['shield'] == 5) & (df['max_speed'] == 5) & (df['frcst_stus'] == 'current')]
而且我知道只要将等号 (== 'current') 更改为 (= 'current') 就会出错。
当我在两列上 select 时,我可以设置列(见下文),但两列都已设置。 ('arghh') 当我尝试测试 'max_speed' 的值时,我得到一个 false is not in index 错误。
df.loc[:, ['max_speed', 'frcst_stus']] = 'hello'
我在尝试用 Python 解释布尔问题时也遇到了错误。坦率地说,我只是还不明白整个重载。
如果需要通过掩码为两列设置不同的值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'