Python 在DataFrame中添加计算字段
我想在名为Python 在DataFrame中添加计算字段,python,function,pandas,calculated-columns,Python,Function,Pandas,Calculated Columns,我想在名为result的现有DataFrame中创建一个名为str\u bos的列。我有以下栏目-“str_nbr”、“ZIP Sales”、“str_Sales”、“ZIP_Distinct”、“ZIP_Share_of stru Sales”、“Counter”、“str_BOS_Cum%”和“str_Sales_Rank” 这是我想到的。但是,需要2个小时才能完成。但是,其他操作(如排序、合并等)需要几秒钟。我错过了什么 def str_bos(row): if row['str_
result
的现有DataFrame
中创建一个名为str\u bos
的列。我有以下栏目-“str_nbr”、“ZIP Sales”、“str_Sales”、“ZIP_Distinct”、“ZIP_Share_of stru Sales”、“Counter”、“str_BOS_Cum%”和“str_Sales_Rank”
这是我想到的。但是,需要2个小时才能完成。但是,其他操作(如排序、合并等)需要几秒钟。我错过了什么
def str_bos(row):
if row['str_sales_rank'] == 1 or row['str_bos_cum%'] <= 0.1:
return 1
elif row['str_bos_cum%'] <= 0.2:
return 2
elif row['str_bos_cum%'] <= 0.3:
return 3
elif row['str_bos_cum%'] <= 0.4:
return 4
elif row['str_bos_cum%'] <= 0.5:
return 5
elif row['str_bos_cum%'] <= 0.6:
return 6
elif row['str_bos_cum%'] <= 0.7:
return 7
elif row['str_bos_cum%'] <= 0.8:
return 8
elif row['str_bos_cum%'] <= 0.9:
return 9
else:
return 10
result['str_bos'] = result.apply(lambda row: str_bos(row), axis=1)
def str_bos(世界其他地区):
如果行['str_sales_rank']=1或行['str_bos_cum%]我会在这里使用方法:
In [21]: df = pd.DataFrame(np.random.rand(10), columns=['A'])
In [22]: df
Out[22]:
A
0 0.513425
1 0.973631
2 0.549615
3 0.747600
4 0.099415
5 0.737613
6 0.885567
7 0.720187
8 0.446683
9 0.434688
In [23]: df['str_bos'] = pd.cut(df.A, bins=np.arange(0, 1.1, 0.1), labels=np.arange(10)+1)
In [24]: df
Out[24]:
A str_bos
0 0.513425 6
1 0.973631 10
2 0.549615 6
3 0.747600 8
4 0.099415 1
5 0.737613 8
6 0.885567 9
7 0.720187 8
8 0.446683 5
9 0.434688 5
代码运行缓慢的原因是.apply
方法迭代每一行,而向量化方法一次对整个列进行计算。在pandas中,您将希望避免对行进行迭代—这几乎保证会有糟糕的性能。这个博客有一个很好的解释(迭代、应用和矢量化部分):