<p>假设您愿意逐行处理数据帧,则可以在while循环中执行最大值检查,并用新行填充新数据帧</p>
<pre><code>import pandas as pd
df = pd.DataFrame({"Index" : [1, 2, 3], "Data 1" : [1,10,7], "Data 2" : [2,5,12], "Max_Allowed" : [3,8,5]})
print(df)
# create a new data frame that we can populate with rows of data
dfz = pd.DataFrame(columns=("Index", "Data 1","Data 2","Max_Allowed"))
iz = 0
for(_, col1, col2, col3, col4) in df.itertuples(name=None):
if col2<=col4 and col3<=col4:
dfz.loc[iz] = [str(iz+1)+"("+str(col1)+")", col2, col3, col4]
iz += 1
else:
iz_orig = iz # keep the index we are at currently
while col2>0 or col3>0:
if col2>col4: # check if more than maximum value for Data 1
col2p=col4
col2 -= col4 # minus the maximum value from current value
else:
col2p=col2
col2 = 0 # set the value to zero
if col3>col4: # check if more than maximum value for Data 2
col3p=col4
col3 -= col4
else:
col3p=col3
col3 = 0
if iz_orig == iz:
# enter with the original Index in parenthesis
dfz.loc[iz] = [str(iz+1)+"("+str(col1)+")", col2p, col3p, col4]
else:
# enter row with just the new Index
dfz.loc[iz] = [str(iz+1), col2p, col3p, col4]
iz += 1
print(dfz)
</code></pre>