繁体   English   中英

添加一个基于另一列计算的列(在 Pandas 中)

[英]Add a column (in Pandas) that is calculated based on another column

我有一个简单的数据库,其中包含每个月的收入,包括Year (值 1991-2020)、 Month (Jan-Dec)和Earnings 我想创建一个新专栏,在 1991-2005 年,我将Earnings栏除以 10000,但对于 2006-2020 年,我希望它与收益栏中的相同。

我是初学者,但我想的是我希望新列 ( TrueEarn ) 为Earnings /10000 但仅限于 1991-2005 列。

df['TrueEarn'] = df['Earnings']/10000 for (['Year']=('1991':"2005"))

因为我是 Python 的新手,这对你来说可能没有意义,但这就是我逻辑上想要写的

你能帮我吗?

Yoy 应该提供一个最小的可重现示例。 但是假设你在另一列中有年份,那么到 go 的方法可能是

df['TrueEarn'] = np.where((df['YEAR'] >= 1991) & (df['YEAR'] <= 2005),
                               df['Earnings'] / 10000, df['Earnings'])

正如@wjandrea 所说,这可以直接使用 pandas 完成,但 numpy 更快。 基准玩具 dataframe:

df = pd.DataFrame(
    {"YEAR": np.random.randint(1991, 2020, size=50000), "Earnings": np.random.uniform(0, 2e10, size=50000)}
)

   
%timeit df["TrueEarn"] = np.where((df["YEAR"] >= 1991) & (df["YEAR"] <= 2005), df["Earnings"] / 10000, df["Earnings"])

每个循环 695 µs ± 3.17 µs(7 次运行的平均值 ± 标准偏差,每次 1,000 次循环)

VS配pandas口罩

%timeit df["TrueEarn"] = df["Earnings"].mask(df["YEAR"].between(1991, 2005), df["Earnings"] / 10000)

每个循环 959 µs ± 4.45 µs(7 次运行的平均值 ± 标准偏差,每次 1,000 次循环)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM