Python-为一个整数操作数字并创建新列



我有以下问题想问:

示例:

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">

  1. 我创建了一个s系列,它基本上计算有多少数字,您将在下一步中使用它来加载零的数量
  2. 创建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

相关内容

最新更新