簡體   English   中英

pandas Dataframe中列的條件轉換

[英]Conditional transformation of column in pandas Dataframe

我想在我的數據框中創建一個新列,如果該行中的第三列滿足特定條件,則這是兩個變量之間的差。

一個最小的示例如下所示:

 dict1 = [{'var0': 0, 'var1': 1, 'var2': 2},
 {'var0': 0, 'var1': 2, 'var2': 4},
{'var0': 1, 'var1': 5, 'var2': 8},
{'var0': 1, 'var1': 15, 'var2': 12},]
df = pd.DataFrame(dict1, index=['s1', 's2','s3','s4'])

特別是我想要var0和var1之間的差異(var0-var1),對於var 2大於3的所有行,否則我想要var0和var2之間的差異(var0-var2)

我的目標輸出是:

     var0  var1  var2 var3
 s1     0     1     2  -2
 s2     0     2     4  -2
 s3     1     5     8  -4
 s4     1    15    12  -14

您可以一行完成

import numpy as np

df['var3'] = np.where( df.var2 > 3, df['var0'] - df['var1'], df['var0'] - df['var2'])

這可能會解決問題

constraint = (df['var2'] < 3)
df.loc[constraint, 'var3'] = df['var0'] - df['var1']
df.loc[~constraint, 'var3'] = df['var0'] - df['var2']

這可能很慢,但是應該可以解決問題。

df['var3'] = 0
for i in df.itertuples():
    if i.var2 > 3:
        amt = i.var0 - i.var1
        df.loc[i.Index,'var3'] = amt
    else:
        amt = i.var0 - i.var2
        df.loc[i.Index,'var3'] = amt

暫無
暫無

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

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