我正在尝试创建一个计算字段(支出),其中此字段的值不能大于另一个字段(预算)。花费字段是根据公式CPM
的其他两个字段(Impressions
,((Impressions/1000)*CPM)
)计算的。
我使用以下内容创建了支出字段:
df['spend'] = df['CPM']*(df['Impressions']/1000)
从那里,我无法找到将if / else条件应用于花费字段中的行的解决方案。如果spend > budget
,则应使用预算中的相应值替换行值。否则,传递并保留花费中的计算值。
谢谢。
答案 0 :(得分:2)
使用Series.mask
或min
列的子集:
df['spend'] = df['spend'].mask(df['spend'] > df['budget'], df['budget'])
df['spend'] = df[['spend', 'budget']].min(axis=1)
样品:
df = pd.DataFrame({'spend':[1,2,8],
'budget':[4,5,6]})
print (df)
budget spend
0 4 1
1 5 2
2 6 8
df['spend'] = df['spend'].mask(df['spend'] > df['budget'], df['budget'])
print (df)
budget spend
0 4 1
1 5 2
2 6 6
df['spend'] = df[['spend', 'budget']].min(axis=1)
print (df)
budget spend
0 4 1
1 5 2
2 6 6
答案 1 :(得分:1)
获得最低价值:
df['spend'] = np.minimum(df['spend'], df['budget'])
答案 2 :(得分:1)
另一个NumPy解决方案:
df['spend'] = np.where(df['spend'] > df['budget'], df['budget'], df['spend'])