У меня есть датафрейм
id_command command_status stage line_amount global_amount
61 ZeFMAA1 Pending 582.96 582.96
61 UbUjNAAV Pending 70481.00 582.96
945 0bR8hEQAS Pending 6400.00 12800.00
Я хотел бы добавить новый столбец "решение", который является логическим значением (истина или ложь) Истинно, если global_amount команды больше 30% суммы line_amount команды, и false, если нет.
Можете ли вы помочь мне сделать это?
Спасибо
Использовать:
df['decision'] = df['global_amount'].gt(df['line_amount'].mul(.3))
print (df)
id_command command_status stage line_amount global_amount decision
0 61 ZeFMAA1 Pending 582.96 582.96 True
1 61 UbUjNAAV Pending 70481.00 582.96 False
2 945 0bR8hEQAS Pending 6400.00 12800.00 True
На основе:
sum of line_amount of a command
Используйте df.groupby()
для группировки по id_command
и используйте transform
для распределения суммы по каждой строке. Затем умножьте на 0.3
и сравните на series.gt()
:
df['decision']=df.global_amount.gt(df.groupby('id_command').line_amount.transform('sum')*0.3)
print(df)
id_command command_status stage line_amount global_amount decision
0 61 ZeFMAA1 Pending 582.96 582.96 False
1 61 UbUjNAAV Pending 70481.00 582.96 False
2 945 0bR8hEQAS Pending 6400.00 12800.00 True
спасибо, anky_91, но почему у вас с @jezrael разные результаты? :о
@cyrinepersonne другой результат, который Jez вычисляет построчно, а этот вычисляется на основе суммы суммы строки, взяв id_command в качестве группы.
Я считаю, что ваш ответ правильный, но лучше дождитесь разъяснения OP.
Каковы ожидаемые результаты ваших выборочных данных? Или какой ответ правильный?