问题描述
我创建了一个函数,该函数去除数字中的“ $”并将其转换为浮点数,然后将总和添加到该列中。当我尝试向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(浮点型,但使用$格式化,类似于在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