我正在尝试创建一个计算字段(花费),其中该字段的值不能大于另一个字段(预算)。使用公式CPM
(公式((Impressions/1000)*CPM)
),根据另外两个字段(((Impressions/1000)*CPM)
、Impressions
)计算支出字段。
我使用以下内容创建了“支出”字段:
df['spend'] = df['CPM']*(df['Impressions']/1000)
在那里,我无法找到一个解决方案来将if/ the条件应用于支出字段中的行。如果是spend > budget
,则应将行值替换为相应的预算值。否则,在支出范围内传递和保留计算值。
谢谢。
发布于 2017-01-14 22:25:57
在列的子集中使用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
发布于 2017-01-14 22:20:28
只需得到最小值:
df['spend'] = np.minimum(df['spend'], df['budget'])
发布于 2017-01-14 22:22:40
另一个NumPy解决方案:
df['spend'] = np.where(df['spend'] > df['budget'], df['budget'], df['spend'])
https://stackoverflow.com/questions/41658374
复制相似问题