pandas Dataframe 中列的条件转换
Conditional transformation of column in pandas Dataframe
如果该行中的第 3 列满足特定条件,我想在我的数据框中创建一个新列,它是两个变量之间的差异。
一个最小的例子是这样的:
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
这可能会奏效
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
一行即可完成
import numpy as np
df['var3'] = np.where( df.var2 > 3, df['var0'] - df['var1'], df['var0'] - df['var2'])
如果该行中的第 3 列满足特定条件,我想在我的数据框中创建一个新列,它是两个变量之间的差异。
一个最小的例子是这样的:
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
这可能会奏效
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
一行即可完成
import numpy as np
df['var3'] = np.where( df.var2 > 3, df['var0'] - df['var1'], df['var0'] - df['var2'])