我有以下问题想问:
示例:
INITIAL DATA
DATE EMAIL SALE
10/2/2020 ABC@gmail.com $ 501.00
10/2/2020 123@gmail.com $ 100.00
10/2/2020 test@gmail.com $ 50.00
10/2/2020 example@gmail.com $ 32.00
10/2/2020 ABC@gmail.com $ 501.00
10/3/2020 test@gmail.com $ 45.00
10/3/2020 123@gmail.com $ 75.00
10/3/2020 example@gmail.com $ 100.00
10/4/2020 example@gmail.com $ 200.00
DESIRED OUTPUT
DATE EMAIL SALE CHECKED LEFT?
10/2/2020 ABC@gmail.com $501.00 $500.00 $1.00
10/2/2020 123@gmail.com $100.00 $100.00 $0.00
10/2/2020 test@gmail.com $50.00 $50.00 $0.00
10/2/2020 example@gmail.com $32.00 $30.00 $2.00
10/2/2020 ABC@gmail.com $501.00 $500.00 $1.00
10/3/2020 test@gmail.com $45.00 $40.00 $5.00
10/3/2020 123@gmail.com $75.00 $70.00 $5.00
10/3/2020 example@gmail.com $100.00 $100.00 $0.00
10/4/2020 example@gmail.com $200.00 $200.00 $0.00
我想创建新的列作为计数器,以标记它是否是一个以整数(EX.10500(结尾的平滑数字,它将被计数并放入一个名为checked的列中。然后剩余的销售额将被放在一个名为left的列中?以及指示其是否被计数的计数器。
我是python中操作数据的新手,所以我不确定我能用谷歌做什么。
任何帮助都将不胜感激,或者如果你们也有建议的话!
谢谢!
试试这个:
df['SalesNum'] = df['SALE'].str.strip('$').astype(float)
df['MARKED'] = (df['SalesNum'] // 10) * 10
df['LEFT$'] = df['SalesNum'] % df['MARKED']
df['COUNTED'] = (df['MARKED'] > 0).astype(int)
df
输出:
DATE EMAILID SALE SalesNum MARKED LEFT$ COUNTED
0 10/2/2020 ABC@gmail.com $ 501.00 501.0 500.0 1.0 1
1 10/2/2020 123@gmail.com $ 100.00 100.0 100.0 0.0 1
2 10/2/2020 test@gmail.com $ 50.00 50.0 50.0 0.0 1
3 10/2/2020 example@gmail.com $ 32.00 32.0 30.0 2.0 1
4 10/2/2020 ABC@gmail.com $ 501.00 501.0 500.0 1.0 1
5 10/3/2020 test@gmail.com $ 45.00 45.0 40.0 5.0 1
6 10/3/2020 123@gmail.com $ 75.00 75.0 70.0 5.0 1
7 10/3/2020 example@gmail.com $ 100.00 100.0 100.0 0.0 1
8 10/4/2020 example@gmail.com $ 200.00 200.0 200.0 0.0 1
详细信息:
- 首先让我们去掉美元符号"SALES"列中的字符串使用
.str
、字符串访问器和strip
并强制转换结果为浮点数据类型,并将其分配给"SalesNum"列 - 下一步,我们可以使用
//
的地板除法来获得次数10将平均分配到"SalesNum"列中。我们将这个结果乘以10得到"标记"> - 现在,我们可以使用模算子
%
来得到我们将"SalesNum"除以"MARKED"> - 最后,如果任何大于零的值为分配给"MARKED">
您可以转换为字符串并进行一些字符串操作,将最后一位数字替换为0,然后再转换回int">
- 我创建了一个
s
系列,它基本上计算有多少数字,您将在下一步中使用它来加载零的数量 - 创建
MARKED
列时,我用.str[0]
取第一个数字,并从s
中添加所需的零数
# df['SALE'] = df['SALE'].replace(['$', '..*'], '', regex=True).str.strip().astype(int)
s = (df['SALE'].astype(str).map(len) - 1).apply(lambda x: x * '0')
df['MARKED'] = (df['SALE'].astype(str).str[0] + s).astype(int)
df['LEFT$'] = df['SALE'] - df['MARKED']
df
Out[1]:
DATE EMAILID SALE MARKED LEFT$
0 10/2/2020 ABC@gmail.com 501 500 1
1 10/2/2020 123@gmail.com 100 100 0
2 10/2/2020 test@gmail.com 50 50 0
3 10/2/2020 example@gmail.com 32 30 2
4 10/2/2020 ABC@gmail.com 501 500 1
5 10/3/2020 test@gmail.com 45 40 5
6 10/3/2020 123@gmail.com 75 70 5
7 10/3/2020 example@gmail.com 100 100 0
8 10/4/2020 example@gmail.com 200 200 0