熊猫:计算字段不能大于另一个字段的值

时间:2017-01-15 06:14:34

标签: python pandas

我正在尝试创建一个计算字段(支出),其中此字段的值不能大于另一个字段(预算)。花费字段是根据公式CPM的其他两个字段(Impressions((Impressions/1000)*CPM))计算的。

我使用以下内容创建了支出字段:

df['spend'] = df['CPM']*(df['Impressions']/1000)

从那里,我无法找到将if / else条件应用于花费字段中的行的解决方案。如果spend > budget,则应使用预算中的相应值替换行值。否则,传递并保留花费中的计算值。

谢谢。

3 个答案:

答案 0 :(得分:2)

使用Series.maskmin列的子集:

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'])