Pandas 基于数据帧中的if语句乘以特定单元格值

Pandas 基于数据帧中的if语句乘以特定单元格值,pandas,lambda,Pandas,Lambda,因此,我试图将一个特定的值(“财产损失”)与数据集中的每一行相关联,但我遇到了一些问题。具体来说,如果满足for循环中指定的条件(例如,如果I>=0.8062,print等),我想将每行的“MD”列中的值乘以一个数字(0.02、0.15等)。我已将我的代码包括在下面: df['RAND'] = np.random.uniform(0, 1, size=df.index.size) dfRAND = list(df['RAND']) def sim_1(): for i in dfRAND:

因此,我试图将一个特定的值(“财产损失”)与数据集中的每一行相关联,但我遇到了一些问题。具体来说,如果满足for循环中指定的条件(例如,如果I>=0.8062,print等),我想将每行的“MD”列中的值乘以一个数字(0.02、0.15等)。我已将我的代码包括在下面:

df['RAND'] = np.random.uniform(0, 1, size=df.index.size)
dfRAND = list(df['RAND'])

def sim_1():
for i in dfRAND:
    result = []
    if i >= 0.8062:
        df['Property Damage'] = df['MD'].apply(lambda x: x * 0.02)
        print(list(val for x, val in enumerate(df['Count']) if 
                   x == dfRAND.index(i)), 'LF0', i,':', df['Property Damage'])
    elif 0.01 <= i < 0.89062:
        df['Property Damage'] = list(df['MD'].apply(lambda x: x * 0.15))
        print(list(val for x, val in enumerate(df['Count']) if 
                   x == dfRAND.index(i)),'LF1', i, ':', df['Property Damage'])
    elif 0.05 <= i < 0.01:
        df['Property Damage'] = list(df['MD'].apply(lambda x: x * 0.20))
        print(list(val for x, val in enumerate(df['Count']) if 
                   x == dfRAND.index(i)),'LF2', i,':', df['Property Damage'])
    elif 0.025 <= i < 0.05:
        df['Property Damage'] = list(df['MD'].apply(lambda x: x * 0.50))
        print(list(val for x, val in enumerate(df['Count']) if 
                   x == dfRAND.index(i)),'LF3', i,':', df['Property Damage'])
    elif 0.0125 <= i < 0.025:
        df['Property Damage'] = list(df['MD'].apply(lambda x: x * 1))
        print(list(val for x, val in enumerate(df['Count']) if 
                   x == dfRAND.index(i)),'LF4', i,':', df['Property Damage'])
    elif 0.0063 <= i < 0.0125:
        df['Property Damage'] = list(df['MD'].apply(lambda x: x * 1))
        print(list(val for x, val in enumerate(df['Count']) if 
                   x == dfRAND.index(i)),'LF5', i,':', df['Property Damage'])
df['RAND']=np.random.uniform(0,1,size=df.index.size)
dfRAND=列表(df['RAND'])
def sim_1():
对于dfRAND中的i:
结果=[]
如果i>=0.8062:
df['Property Damage']=df['MD']。适用(λx:x*0.02)
打印(列表(x的val,枚举中的val(df['Count']),如果
x==dfRAND.index(i)),'LF0',i',:',df['Property Damage'])

elif 0.01你在找这样的东西吗

my_bins = {pd.Series.max(df['RAND'])-1: 1, 
           .01: .15, 
           .0125: 1, 
           .025: .5, 
           .05: .2,
           pd.Series.max(df['RAND'])+1 : .02}
df['rand_multiplier'] = pd.cut(df['RAND'], bins = sorted(my_bins.keys()), labels = list(range(len(my_bins) - 1))).apply(lambda x: my_bins[sorted(my_bins.keys())[x]])

df.apply(lambda row: row['MD'] * row['rand_multiplier'], axis = 1)
我有点赶时间,所以这不是最漂亮的东西。基本上,我根据您的标准创建了BIN,并创建了一个“乘数”列,将
df['RAND']
中的每个条目与一个乘数关联起来。然后我们可以迭代df,并将乘法因子应用于“MD”行


当然,如果没有“MD”数据,我无法显示生成的结果。

您真的需要它逐行打印吗?或者您只是想根据乘法因子计算每行的财产损失?如果是后者,您可以使用
numpy来执行此操作。选择
,然后您可以打印所有内容。嗨@ALollz。我不需要逐行打印,但我需要某种方式显示每行的具体财产损失值。有没有什么方法可以将行号指定给列表中的每个财产损失?