Умножение определенного значения ячейки на основе оператора if в кадре данных Pandas - PullRequest
0 голосов
/ 09 октября 2018

Поэтому я пытаюсь связать определенное значение («Повреждение имущества») с каждой строкой в ​​моем наборе данных, но у меня возникли некоторые проблемы с этим.В частности, я хочу умножить значение в столбце 'MD' для каждой строки на число (0,02, 0,15 и т. Д.), Если оно соответствует условиям, указанным в цикле for (например, если i> = 0,8062, печать и т. Д.),Я включил свой код ниже:

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

Проблема, с которой я сталкиваюсь на данный момент, заключается в том, что код печатает все значения 'Property Damage' для каждой строки.Я хочу, чтобы он дал мне значение «Ущерб собственности» для конкретной строки в зависимости от того, какое условие выполняется в цикле for.

Любая помощь приветствуется.Заранее спасибо.

1 Ответ

0 голосов
/ 09 октября 2018

Вы ищете что-то подобное?

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)

Я немного тороплюсь, так что это не самая красивая вещь.По сути, я создал ячейки на основе ваших критериев и создал столбец «множитель», который связывает каждую запись в df['RAND'] с множителем.Затем мы можем перебрать df и применить коэффициент умножения к вашей строке 'MD'.

Конечно, я не могу показать полученные результаты без данных 'MD'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...