python-使用Pandas中的方法链接分配给列的子集

我想使用Pandas方法链接的现代方法将值分配给列的子集.

假设我有以下数据框

df = pd.DataFrame({'a': [1, 0, 0, 1]})

   a
0  1
1  0
2  0
3  1

我想达到相当于

df.loc[df.a == 1, 'a'] = 2

用类似的东西

df.query('a == 1').assign(a=2)

但是,以上内容创建了一个子集数据框,并且没有修改整个数据框.这有可能实现吗?

解决方法:

顾名思义,查询方法用于查询数据框,而不用于设置值.

因此,loc完全合适,请注意您可以通过字符串将其分配给系列:

df.loc[df.a == 1, 'a'] = 2

比较习惯的做法可能是使用pd.Series.mask,您甚至可以就地使用它:

df['a'].mask(df['a'] == 1, 2, inplace=True)

您应该将“方法链接”视为达到目的的一种手段,而不是其本身的要求或目标.如果设置使用方法链接,则可以使用pd.DataFrame.assign

df = df.assign(a=df['a'].mask(df['a'] == 1, 2))

作为一个独立的操作,我发现这不太可读.但是您可能会发现它对于通过方法链进行的多个链接操作很有用.

上一篇:java-在MarkLogic的路径范围查询中不区分大小写的搜索


下一篇:MySQL多索引问题