有几种选择。
熊猫通过pd.cut
/ NumPy 通过np.digitize
您可以构建边界列表,然后使用专业库函数。这在@EdChum 的解决方案 https://stackoverflow.com/a/50098390/9209546,并且也在这个答案 https://stackoverflow.com/a/49382340/9209546.
NumPy 通过np.select
df = pd.DataFrame(data=np.random.randint(1,10,10), columns=['a'])
criteria = [df['a'].between(1, 3), df['a'].between(4, 7), df['a'].between(8, 10)]
values = [1, 2, 3]
df['b'] = np.select(criteria, values, 0)
的要素criteria
是布尔级数,所以对于lists值,您可以使用df['a'].isin([1, 3])
, etc.
字典映射通过range
d = {range(1, 4): 1, range(4, 8): 2, range(8, 11): 3}
df['c'] = df['a'].apply(lambda x: next((v for k, v in d.items() if x in k), 0))
print(df)
a b c
0 1 1 1
1 7 2 2
2 5 2 2
3 1 1 1
4 3 1 1
5 5 2 2
6 4 2 2
7 4 2 2
8 9 3 3
9 3 1 1