我想使用 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
更惯用的可能是使用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))
作为一个孤立的操作,我发现它的可读性较差。但是您可能会发现它对通过方法链进行的多个链接操作很有用。
关于python - 使用 Pandas 中的方法链接分配给列的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53223545/