Python 使用中的方法链接指定给列的子集
我想使用Pandas方法链接的现代方式为列的子集赋值 假设我有以下数据帧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方法是为查询数据帧而设计的,而不是用于设置值 因
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