假设有一个 Dataframe :
name age hb ali 34 14 jex 16 13 aja 24 16 joy 23 12
我有一个值“5”,我想从列“hb”的每个成员中减去它新列可以是:
hb 9 8 11 7
什么是最好的方法来做到这一点…谢谢和问候。
9nvpjoqh1#
简单地从pandas.Series中减去标量值,对于数值列,pandas将自动广播标量值并从列中的每个元素中减去它。举例来说-
pandas.Series
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
tf7tbtn22#
如果您正在使用此:
df['hb'] - 5
您将得到一个新的单列。但是如果你想保留剩下的部分,那么你必须用途:
df['hb'] -= 5
mwyxok5s3#
您也可以使用pandas.apply函数来实现这一点df.loc[:, "hb"] = df["hb"].apply(lambda x: x - 5)
df.loc[:, "hb"] = df["hb"].apply(lambda x: x - 5)
kjthegm64#
如果你想把这个减法保存在你的DataFrame中,避免使用旧的SettingWithCopyWarning,使用loc:
SettingWithCopyWarning
loc
df.loc["hb"] -= 5
重要的是,如果需要使用多个条件来选择一个值范围,请将两者都放入loc调用中(链接不适用于此):
df.loc[df.age==34,"hb"] -= 5
uubf1zoe5#
试试这个:
df["hb"] - 5
df["hb"]将选择hb列并从中减去5
df["hb"]
hb
qxsslcnc6#
eval允许您将新值直接分配给现有列hb:
eval
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。
inplace=True
df
6条答案
按热度按时间9nvpjoqh1#
简单地从
pandas.Series
中减去标量值,对于数值列,pandas将自动广播标量值并从列中的每个元素中减去它。举例来说-演示-
tf7tbtn22#
如果您正在使用此:
您将得到一个新的单列。但是如果你想保留剩下的部分,那么你必须用途:
mwyxok5s3#
您也可以使用pandas.apply函数来实现这一点
df.loc[:, "hb"] = df["hb"].apply(lambda x: x - 5)
kjthegm64#
如果你想把这个减法保存在你的DataFrame中,避免使用旧的
SettingWithCopyWarning
,使用loc
:重要的是,如果需要使用多个条件来选择一个值范围,请将两者都放入
loc
调用中(链接不适用于此):uubf1zoe5#
试试这个:
df["hb"]
将选择hb
列并从中减去5qxsslcnc6#
eval
允许您将新值直接分配给现有列hb
:由于
inplace=True
,因此不需要将其分配回df
。