<p>用于生成原始数据帧的代码(来自原始的未编辑问题):</p>
<pre><code>df = pd.DataFrame({
'days': [3, 2, 9, 10, 10],
'days_1': [5, 1, 8, 7, 5],
'days_2': [4, 3, 10, 8, 6],
'period': [1, 4, 6, 11, 7],
'percent_1': [0.2, 0.3, 0.4, 0.5, 0.7],
'percent_2': [0.1, 0.1, 0.2, 0.3, 0.4],
'amount': [100, 500, 600, 700, 800]
}, columns=['days', 'days_1', 'days_2', 'period', 'percent_1', 'percent_2', 'amount'])
</code></pre>
<p>以下代码提供了原始问题中所需的结果(对于在注释中被要求这样做后创建的简化案例,不进行更新):</p>
<pre><code>df['amount_missed'] = np.where((df['days_1'] < df['days']) & (df['days'] < df['days_2']),
df['amount'] * (df['percent_1'] - df['percent_2']) / 100,
np.where((df['days_2'] < df['days']) & (df['days'] < df['period']),
df['amount'] * (df['percent_2']) / 100,
0.0))
df['days_missed'] = np.where((df['days_1'] < df['days']) & (df['days'] < df['days_2']),
df['days'] - df['days_1'],
np.where((df['days_2'] < df['days']) & (df['days'] < df['period']),
df['days'] - df['days_2'],
0))
</code></pre>
<p>输出:</p>
<pre><code> days days_1 days_2 period percent_1 percent_2 amount amount_missed \
0 3 5 4 1 0.2 0.1 100 0.0
1 2 1 3 4 0.3 0.1 500 1.0
2 9 8 10 6 0.4 0.2 600 1.2
3 10 7 8 11 0.5 0.3 700 2.1
4 10 5 6 7 0.7 0.4 800 0.0
days_missed
0 0
1 1
2 1
3 2
4 0
</code></pre>
<p>编辑:</p>
<p>与<a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.select.html" rel="nofollow noreferrer">^{<cd1>}</a>相同的答案:</p>
<pre><code>m1 = (df['days_1'] < df['days']) & (df['days'] < df['days_2'])
s1 = df['amount'] * (df['percent_1'] - df['percent_2']) / 100
s11 = df['days'] - df['days_1']
m2 = (df['days_2'] < df['days']) & (df['days'] < df['period'])
s2 = df['amount'] * (df['percent_2']) / 100
s22 = df['days'] - df['days_2']
df['amount_missed'] = np.select([m1, m2], [s1, s2], default=0)
df['days_missed'] = np.select([m1, m2], [s11, s22], default=0)
</code></pre>