如何从pandas DataFrame的列中减去单个值

biswetbf  于 12个月前  发布在  其他
关注(0)|答案(6)|浏览(182)

假设有一个 Dataframe :

name age hb
ali  34  14
jex  16  13
aja  24  16
joy  23  12

我有一个值“5”,我想从列“hb”的每个成员中减去它
新列可以是:

hb
9
8
11
7

什么是最好的方法来做到这一点…
谢谢和问候。

9nvpjoqh

9nvpjoqh1#

简单地从pandas.Series中减去标量值,对于数值列,pandas将自动广播标量值并从列中的每个元素中减去它。举例来说-

df['hb'] - 5 #Where `df` is your dataframe.

演示-

In [43]: df
Out[43]:
  name  age  hb
0  ali   34  14
1  jex   16  13
2  aja   24  16
3  joy   23  12

In [44]: df['hb'] - 5
Out[44]:
0     9
1     8
2    11
3     7
Name: hb, dtype: int64
tf7tbtn2

tf7tbtn22#

如果您正在使用此:

df['hb'] - 5

您将得到一个新的单列。但是如果你想保留剩下的部分,那么你必须用途:

df['hb'] -= 5
mwyxok5s

mwyxok5s3#

您也可以使用pandas.apply函数来实现这一点
df.loc[:, "hb"] = df["hb"].apply(lambda x: x - 5)

kjthegm6

kjthegm64#

如果你想把这个减法保存在你的DataFrame中,避免使用旧的SettingWithCopyWarning,使用loc

df.loc["hb"] -= 5

重要的是,如果需要使用多个条件来选择一个值范围,请将两者都放入loc调用中(链接不适用于此):

df.loc[df.age==34,"hb"] -= 5
uubf1zoe

uubf1zoe5#

试试这个:

df["hb"] - 5

df["hb"]将选择hb列并从中减去5

qxsslcnc

qxsslcnc6#

eval允许您将新值直接分配给现有列hb

In [6]: df.eval("hb = hb - 5", inplace=True)

In [7]: df
Out[7]: 
  name  age  hb
0  ali   34   9
1  jex   16   8
2  aja   24  11
3  joy   23   7

由于inplace=True,因此不需要将其分配回df

相关问题