python - cumcount() 无

标签 python pandas

我想要一个新的列( not_ordered_in_STREET_x_before_my_car )来计算 Dataframe 中的 None 值,直到我所在的行,按 x 分组,按 x 和 y 排序。

import pandas as pd
x_start = 1
y_start = 1
size_city = 10

cars = pd.DataFrame({'x': np.repeat(np.arange(x_start,x_start+size_city),size_city),
                    'y': np.tile(np.arange(y_start,y_start+size_city),size_city),
                     'pizza_ordered' : np.repeat([None,None,1,6,3,7,5,None,8,9,0,None,None,None,4,None,11,12,14,15],5)})

前 4 列是我拥有的,第五列是我想要的。

    x   y     pizza_ordered                 not_ordered_in_STREET_x_before_my_car
0   1   1          None                                      0
1   1   2          None                                      1
2   1   3             1                                      2
3   1   4             2                                      2
4   1   5             1                                      2
5   1   6             1                                      2
6   1   7             1                                      2
7   1   8          None                                      2
8   1   9             1                                      3
9   1  10             4                                      3
10  2   1             1                                      0
11  2   2          None                                      0
12  2   3          None                                      1
13  2   4          None                                      2
14  2   5             4                                      3
15  2   6          None                                      3
16  2   7             5                                      4
17  2   8             3                                      4
18  2   9             1                                      4
19  2  10             1                                      4

这个我已经尝试过了,但是不行。

    cars = cars.sort_values(['x', 'y'])
    cars['not_ordered_in_STREET_x_before_my_car'] = cars.where(cars['pizza_ordered'].isnull()).groupby(['x']).cumcount().add(1)

最佳答案

你可以尝试:

cars["not_ordered_in_STREET_x_before_my_car"] = cars.groupby("x")[
    "pizza_ordered"
].transform(lambda x: x.isna().cumsum().shift(1).fillna(0).astype(int
    ))
print(cars)

打印:

     x   y pizza_ordered  not_ordered_in_STREET_x_before_my_car
0    1   1          None                                      0
1    1   2          None                                      1
2    1   3          None                                      2
3    1   4          None                                      3
4    1   5          None                                      4
5    1   6          None                                      5
6    1   7          None                                      6
7    1   8          None                                      7
8    1   9          None                                      8
9    1  10          None                                      9
10   2   1             1                                      0
11   2   2             1                                      0
12   2   3             1                                      0
13   2   4             1                                      0
14   2   5             1                                      0
15   2   6             6                                      0
16   2   7             6                                      0
17   2   8             6                                      0
18   2   9             6                                      0
19   2  10             6                                      0
20   3   1             3                                      0
21   3   2             3                                      0
22   3   3             3                                      0
23   3   4             3                                      0
24   3   5             3                                      0
25   3   6             7                                      0
26   3   7             7                                      0
27   3   8             7                                      0
28   3   9             7                                      0
29   3  10             7                                      0
30   4   1             5                                      0
31   4   2             5                                      0
32   4   3             5                                      0
33   4   4             5                                      0
34   4   5             5                                      0
35   4   6          None                                      0
36   4   7          None                                      1
37   4   8          None                                      2
38   4   9          None                                      3
39   4  10          None                                      4
40   5   1             8                                      0
41   5   2             8                                      0
42   5   3             8                                      0
43   5   4             8                                      0
44   5   5             8                                      0
45   5   6             9                                      0
46   5   7             9                                      0
47   5   8             9                                      0
48   5   9             9                                      0
49   5  10             9                                      0
50   6   1             0                                      0
51   6   2             0                                      0
52   6   3             0                                      0
53   6   4             0                                      0
54   6   5             0                                      0
55   6   6          None                                      0
56   6   7          None                                      1
57   6   8          None                                      2
58   6   9          None                                      3
59   6  10          None                                      4
60   7   1          None                                      0
61   7   2          None                                      1
62   7   3          None                                      2
63   7   4          None                                      3
64   7   5          None                                      4
65   7   6          None                                      5
66   7   7          None                                      6
67   7   8          None                                      7
68   7   9          None                                      8
69   7  10          None                                      9
70   8   1             4                                      0
71   8   2             4                                      0
72   8   3             4                                      0
73   8   4             4                                      0
74   8   5             4                                      0
75   8   6          None                                      0
76   8   7          None                                      1
77   8   8          None                                      2
78   8   9          None                                      3
79   8  10          None                                      4
80   9   1            11                                      0
81   9   2            11                                      0
82   9   3            11                                      0
83   9   4            11                                      0
84   9   5            11                                      0
85   9   6            12                                      0
86   9   7            12                                      0
87   9   8            12                                      0
88   9   9            12                                      0
89   9  10            12                                      0
90  10   1            14                                      0
91  10   2            14                                      0
92  10   3            14                                      0
93  10   4            14                                      0
94  10   5            14                                      0
95  10   6            15                                      0
96  10   7            15                                      0
97  10   8            15                                      0
98  10   9            15                                      0
99  10  10            15                                      0

关于python - cumcount() 无,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66806209/

相关文章:

python - 如何更新 matplotlib 中的条形图?

python - pandas 使用多索引进行条件更新

python - pandas DataFrame 列中值的计数频率

python - 用excel/sql/pandas中同一列中出现的频率替换列中的值

Python:缺少行的多个 ID 的累积和

python - 用缺失键的默认值替换 pandas 列中的值

python - 查找最近修改的文件并操作输出

Python:用土耳其语字母阅读和打印土耳其语的问题

Python urllib.request 在 Azure Notebooks 中抛出 403

python - 日期减法导致 "TypeError: cannot perform truediv with this index type datetimeindex"