设定值基于df.query?

2024-05-20 21:01:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据查询设置列的值。{{1}可能更容易实现cd1},但对于cd1}来说,这可能更容易实现。在

import numpy as np
import pandas as pd

np.random.seed(51723)
df = pd.DataFrame(np.random.rand(n, 3), columns=list('abc'))

我想创建一个新列d,并在满足以下条件时将值设置为1:

^{pr2}$

除此之外,我还尝试过:

df['d'] = np.nan
df.query(criteria).loc[:,'d'] = 1

但这似乎除了给出SettingWithCopyWarning之外什么也没做,即使我使用的是.loc

然后像这样传递inplace

df.query(criteria, inplace=True).loc[:,'d'] = 1

给出AttributeError: 'NoneType' object has no attribute 'loc'


Tags: importnumpydataframepandasdfasnprandom
1条回答
网友
1楼 · 发布于 2024-05-20 21:01:12

AFAIKdf.query()返回一个新的DF,因此请尝试以下方法:

In [146]: df.loc[df.eval(criteria), 'd'] = 1

In [147]: df
Out[147]:
          a         b         c    d
0  0.175155  0.221811  0.808175  1.0
1  0.069033  0.484528  0.841618  1.0
2  0.174685  0.648299  0.904037  1.0
3  0.292404  0.423220  0.897146  1.0
4  0.169869  0.395967  0.590083  1.0
5  0.574394  0.804917  0.746797  NaN
6  0.642173  0.252437  0.847172  NaN
7  0.073629  0.821715  0.859776  1.0
8  0.999789  0.833708  0.230418  NaN
9  0.028163  0.666961  0.582713  NaN

相关问题 更多 >