Python 使用中的方法链接指定给列的子集

Python 使用中的方法链接指定给列的子集,python,pandas,indexing,method-chaining,Python,Pandas,Indexing,Method Chaining,我想使用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) 但是,上面的操作会创建一个子集数据帧,而不会修改整个数据帧。这有可能实现吗?正如其名称所示,query方法是为查询数据帧而设计的,而不是用于设置值 因

我想使用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)

但是,上面的操作会创建一个子集数据帧,而不会修改整个数据帧。这有可能实现吗?

正如其名称所示,
query
方法是为查询数据帧而设计的,而不是用于设置值

因此,
loc
是完全合适的,请注意,您可以通过字符串为序列分配:

df.loc[df.a == 1, 'a'] = 2
更惯用的可能是使用,您甚至可以就地使用:

df['a'].mask(df['a'] == 1, 2, inplace=True)
您应该将“方法链接”视为达到目的的手段,而不是其本身的需求或目标。如果设置为使用方法链接,则可以使用:


作为一个独立的操作,我发现它的可读性较差。但是,您可能会发现它对通过方法链接的多链接操作非常有用。

您可以使用以下代码指定值

df[df['a']==1]['a']=2

>您应该将“方法链接”视为达到目的的手段,而不是其本身的需求或目标。很公平。从这次演讲中,我得到了这样的印象:Pandas正在推广方法链接,作为做大多数事情的新默认方式。还要注意,inplace将来可能会被弃用。@Jarno,首先,IMO风格应该留给用户。当然,Pandas开发者可以推广一种特定的方法,但最终社区(用户)获得了自己的直觉/偏好。第二点是,任何功能都存在风险(请记住,
sort
被重命名为
sort\u value
)。如果该功能存在并且没有弃用警告,您应该乐于使用它。
df[df['a']==1]['a']=2