创建一个函数,去掉$,转换为float并应用于pandas groupby



我创建了一个函数,该函数去掉数字中的"$"并将其转换为float,然后将列中的总和相加。当我尝试将该函数调用到groupby时,我遇到了一个错误。这是代码:

def total_sales():
return df['Total sales USD'].str.strip('$').astype(float).sum()
df_order_sales_date = df.groupby(['column1','column2']).apply(total_sales)

我收到一个错误,上面写着"TypeError:total_sales((需要0个位置参数,但给定了1">

我该怎么办?是否可以创建一个函数来剥离$,将字符串转换为float并添加总数,然后将其应用于groupby中的列?感谢的帮助

您可以运行以下操作来对格式化为string的货币/浮动数据求和,然后将格式调整回:

  1. 字符串
  2. 浮动

我已经注释掉了选项#1,它将返回一个字符串,因为我怀疑所需的结果可能是选项#2(一个浮点值,但的格式与Excel中的浮点值格式类似(。我还展示了如果运行选项#1(一个字符串(,输出会是什么样子。我加入了print(df_order_sales_date.info()),向您展示了尽管在美学上结果完全相同,但数据类型和基本值实际上是不同的`:

import pandas as pd
df = pd.DataFrame({'column1': {0: 'A', 1: 'A', 2: 'B', 3: 'B'},
'column2': {0: 'a', 1: 'b', 2: 'a', 3: 'a'},
'Total sales USD': {0: '$10.05', 1: '$20.45', 2: '$5.50', 3: '$15.25'}})
df['Total sales USD'] = df['Total sales USD'].str.strip('$').astype(float)
df_order_sales_date = df.groupby(['column1','column2'])['Total sales USD'].sum().reset_index()
# df_order_sales_date['Total sales USD'] = '$' + df_order_sales_date['Total sales USD'].astype(str) #option1
pd.options.display.float_format = '${:,.2f}'.format #option2
print(df_order_sales_date.info())
df_order_sales_date
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
#   Column           Non-Null Count  Dtype 
---  ------           --------------  ----- 
0   column1          3 non-null      object
1   column2          3 non-null      object
2   Total sales USD  3 non-null      float64
dtypes: object(3)
memory usage: 200.0+ bytes
None
Out[3]: 
column1 column2 Total sales USD
0       A       a          $10.05
1       A       b          $20.45
2       B       a          $20.75

然而,如果你选择#1选项,那么它将返回:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
#   Column           Non-Null Count  Dtype 
---  ------           --------------  ----- 
0   column1          3 non-null      object
1   column2          3 non-null      object
2   Total sales USD  3 non-null      object
dtypes: object(3)
memory usage: 200.0+ bytes
None
Out[367]: 
column1 column2 Total sales USD
0       A       a          $10.05
1       A       b          $20.45
2       B       a          $20.75

最新更新