我创建了一个函数,该函数去掉数字中的"$"并将其转换为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(一个浮点值,但的格式与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