簡體   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