簡體   English   中英

三列向量化操作

[英]Vectorized operation on three columns

首先,讓我們創建隨機 dataframe:

df = pd.DataFrame(
    {
    "A": np.random.randint(0, 70, size=5),
    "B": np.random.randint(-10, 35, size=5),
    "C": np.random.randint(10, 50, size=5)
    }
)

然后,我使用minmax函數來創建兩個額外的列:

df['max'] = df[['A', 'B', 'C']].max(axis=1)
df['min'] = df[['A', 'B', 'C']].min(axis=1)

Output:

    A   B   C  max  min
0  17  26  31   31   17
1  45  31  17   45   17
2  36  24  31   36   24
3  16  17  24   24   16
4  16  12  23   23   12

什么是最有效和最優雅的方式來獲得“中間”列的剩余價值,以便 output 看起來像這樣:

    A   B   C  max  min  mid
0  17  26  31   31   17   26
1  45  31  17   45   17   31
2  36  24  31   36   24   31
3  16  17  24   24   16   17
4  16  12  23   23   12   16

我正在尋找矢量化解決方案。 我能夠使用條件來實現這一點:

conditions = [((df['A'] > df['B']) & (df['A'] < df['C']) | (df['A'] > df['C']) & (df['A'] < df['B'])), 
              ((df['B'] > df['A']) & (df['B'] < df['C']) | (df['B'] > df['C']) & (df['B'] < df['A'])), 
              ((df['C'] > df['A']) & (df['C'] < df['B']) | (df['C'] > df['B']) & (df['C'] < df['A']))]

choices = [df['A'], df['B'], df['C']]

df['mid'] = np.select(conditions, choices, default=0)

但是,我認為有更優雅的解決方案。

你應該使用median嗎?

df[["A","B","C"]].median(axis=1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM