我有两个数据框,比方说df
and map_dum
。这里是df
.
>>> print(df)
sales
0 5
1 10
2 9
3 7
4 1
5 1
6 -1
7 2
8 9
9 8
10 1
11 3
12 10
13 -2
14 8
15 5
16 9
17 6
18 10
19 -1
20 5
21 3
这是为了map_dum
.
>>> print(map_dum)
class more_than_or_equal_to less_than
0 -1 -1000 0
1 1 0 2
2 2 2 4
3 3 4 6
4 4 6 8
5 5 8 10
6 6 10 1000
我的目标是添加新列df
, 柱子class
。为此,我必须检查中的值df['sales']
位于其中的值之间map_dum
。例如,如果我想知道class
对于第一行df['sales']
, 5, 那么class
将为 3。最终输出如下所示。
>>> print(df)
sales class
0 5 3
1 10 6
2 9 5
3 7 4
4 1 1
5 1 1
6 -1 -1
7 2 2
8 9 5
9 8 5
10 1 1
11 3 2
12 10 6
13 -2 -1
14 8 5
15 5 3
16 9 5
17 6 4
18 10 6
19 -1 -1
20 5 3
21 3 2
目前,我正在使用apply
然而,要解决这个问题,速度非常慢,因为我的数据集非常大。
def add_class(sales, mapping, lower_limit, upper_limit):
result = mapping.loc[((mapping[lower_limit]<=sales)&(mapping[upper_limit]>sales)), 'class'].tolist()[0]
return result
df['class'] = df['sales'].apply(lambda sales: add_class(sales, map_dum, 'more_than_or_equal_to', 'less_than'))
因此,对于我来说,性能确实很重要。任何其他方式添加class
列到df
在不违反标准的情况下,像矢量化解决方案之类的东西?谢谢你的帮助!