Как добавить знак доллара перед значением столбца и после добавления определенного столбца в Python Python - PullRequest
0 голосов
/ 19 октября 2018

Я хочу добавить знак доллара перед значениями столбца после суммы этих значений. Ниже приведен пример формата:

item_orders = [{'price':'$20','quantity':'2','order_item':'pizza','total_amount':'$40'},
              {'price':'$20','quantity':'1','order_item':'potato fry','total_amount':'$20'} ]

** код **

available_cart_item = pd.DataFrame(item_orders)
available_cart_item.loc['Total'] = pd.Series(available_cart_item['total_amount'].sum(), index=['total_amount']) 
print(available_cart_item)

получил что-то вроде этого

below code result image

Я хочу что-то вроде этого

Requied format using pandas

Ответы [ 2 ]

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

Из-за $ ваш DataFrame обрабатывает столбцы price и total_amount как строки.

Вы можете преобразовать их в числовые значения, убрав символ '$', а затем вы можете суммировать значения в столбцекак и следовало ожидать.

Если вы хотите отобразить итоговые суммы в DataFrame со знаком $, вы можете использовать стилизацию панд (см. документацию здесь )

from IPython.display import display

item_orders = [{'price':'$20','quantity':'2','order_item':'pizza','total_amount':'$40'},
               {'price':'$20','quantity':'1','order_item':'potato fry','total_amount':'$20'}]

available_cart_item = pd.DataFrame(item_orders)

# convert from strings to float values
available_cart_item['quantity'] = available_cart_item['quantity'].astype(int)
available_cart_item['total_amount'] = available_cart_item['total_amount'].str.strip('$').astype(float)
available_cart_item['price'] = available_cart_item['price'].str.strip('$').astype(float)

available_cart_item.loc['Total'] = pd.Series(available_cart_item['total_amount'].sum(), index=['total_amount']) .astype(float)
available_cart_item.fillna('', inplace=True)

# adds the $ through style formatting
formatters={'price': lambda x: '' if type(x)==str else '\u20B9{:.2f}'.format(x), 
            'total_amount': lambda x: '' if type(x)==str else '\u20B9{:.2f}'.format(x), 
            'Total': lambda x: '' if type(x)==str else '\u20B9{:.2f}'.format(x)}

display(available_cart_item.style.format(formatters))
0 голосов
/ 19 октября 2018

Если возможно, лучше использовать числовые значения без $ для упрощения работы с пандами.

available_cart_item['total_amount'] = available_cart_item['total_amount'].str.strip('$')

Удалить $ на strip, преобразовать в integersum.Последнее добавление $ от f-string s.

item_orders = [{'price':'$20','quantity':'2','order_item':'pizza','total_amount':'$40'},
              {'price':'$20','quantity':'1','order_item':'potato fry','total_amount':'$20'} ]

available_cart_item = pd.DataFrame(item_orders)

total = available_cart_item['total_amount'].str.strip('$').astype(int).sum()
#pandas 3.6+
available_cart_item.loc['Total', 'total_amount'] = f'${total}'
#pandas below 3.6
#available_cart_item.loc['Total', 'total_amount'] = '${}'.format(total)
available_cart_item = available_cart_item.fillna('')
print (available_cart_item)
       order_item price quantity total_amount
0           pizza   $20        2          $40
1      potato fry   $20        1          $20
Total                                     $60
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...