熊猫pythongroupby取决于其他列表

我有 x 和 y 辆汽车,并想添加一个带有汽车块 (1-3) 的新列。“y_block_number_ends”给出了块结束的 y 坐标。

import pandas as pd

x_start = 1
y_start = 1
size_city = 5

y_block_number_ends = [2,4]

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)})

#cars['block_y']= cars.where([cars['y'] > 0 | (cars['y'] <= 2)])

print(cars)

新的数据框看起来像这样

    x  y    block
0   1  1      1
1   1  2      1
2   1  3      2
3   1  4      2
4   1  5      3
5   2  1      1
6   2  2      1
7   2  3      2
8   2  4      2
9   2  5      3
10  3  1      1
11  3  2      1
12  3  3      2
13  3  4      2
14  3  5      3
15  4  1      1
16  4  2      1
17  4  3      2
18  4  4      2
19  4  5      3
20  5  1      1
21  5  2      1
22  5  3      2
23  5  4      2
24  5  5      3

回答

pd.cut

cars.assign(block=pd.cut(cars.y, [0, 2, 4, float('inf')], labels=[1, 2, 3]))

    x  y block
0   1  1     1
1   1  2     1
2   1  3     2
3   1  4     2
4   1  5     3
5   2  1     1
6   2  2     1
7   2  3     2
8   2  4     2
9   2  5     3
10  3  1     1
11  3  2     1
12  3  3     2
13  3  4     2
14  3  5     3
15  4  1     1
16  4  2     1
17  4  3     2
18  4  4     2
19  4  5     3
20  5  1     1
21  5  2     1
22  5  3     2
23  5  4     2
24  5  5     3

searchsorted

ends = np.array([2, 4])
labels = np.array([1, 2, 3])
cars.assign(block=labels[ends.searchsorted(cars.y)])

    x  y  block
0   1  1      1
1   1  2      1
2   1  3      2
3   1  4      2
4   1  5      3
5   2  1      1
6   2  2      1
7   2  3      2
8   2  4      2
9   2  5      3
10  3  1      1
11  3  2      1
12  3  3      2
13  3  4      2
14  3  5      3
15  4  1      1
16  4  2      1
17  4  3      2
18  4  4      2
19  4  5      3
20  5  1      1
21  5  2      1
22  5  3      2
23  5  4      2
24  5  5      3


以上是熊猫pythongroupby取决于其他列表的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>