我有以下DataFrame:
>>>> df = pd.DataFrame(data={
'type': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
'value': [0, 2, 3, 4, 0, 3, 2, 3, 0]})
>>> df
type value
0 A 0
1 A 2
2 A 3
3 B 4
4 B 0
5 B 3
6 C 2
7 C 3
8 C 0
Run Code Online (Sandbox Code Playgroud)
我需要完成的工作如下:对于每种类型,请跟踪非零值的累积计数,但是每次遇到0值时都从零开始。
type value cumcount
0 A 0 NaN
1 A 2 1
2 A 3 2
3 B 4 1
4 B 0 NaN …Run Code Online (Sandbox Code Playgroud) 我有一个 PySpark DataFrame df,它有一个数字列(带有 NaN)
+-------+
|numbers|
+-------+
| 142.56|
| |
|2023.33|
| 477.76|
| 175.52|
|1737.45|
| 520.72|
| 641.2|
| 79.3|
| 138.43|
+-------+
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列来定义一些垃圾箱,例如0, (0, 500], (500, 1000], (1000, inf)
有没有办法使用pandas.cut这样的函数来完成此任务?目前,我使用 PySpark 执行此操作的方法是定义一个 udf 函数,如下所示,但这种方法的缺点是繁琐且非参数化
from pyspark.sql import functions as F
from pyspark.sql.types import *
def func(numbers):
if numbers==0:
return '0'
elif numbers>0 and numbers<=500:
return '(0, 500]'
elif numbers>500 and numbers<=1000:
return '(500, 1000]'
elif numbers>500:
return '(500, inf)'
else return …Run Code Online (Sandbox Code Playgroud)