我有一个基本表,如:
col1是一列独立的值,col2是基于国家和类型组合的聚合。我想用以下逻辑计算列col3到col5:
为了实现这一点,我编写了如下函数:
def calculate(df):
for i in range(len(df)):
df['col3'].loc[i] = df['col1'].loc[i]/sum(df['col1'])
df['col4'].loc[i] = df['col1'].loc[i]/df['col2'].loc[i]
df['col5'].loc[i] = np.exp(df['col3'].loc[i]*df['col4'].loc[i])
return df
此函数将执行,并给出预期的结果,但笔记本也会抛出一个警告:
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
我不确定我在这里写的是不是最好的函数。任何帮助都将不胜感激!谢谢。你知道吗
目标是使用
pandas
进行矢量化计算。循环计算是可能的,但效率很低,因为它们不是用连续的数字数组处理的。你知道吗col3:col1中的元素与col1总数的比率
col4:col1中的元素与col2中相应元素的比值
col5:col3和col4中行元素乘积的自然指数
我认为熊猫中的
apply
和loop是最好避免的,所以更好更快的是使用vewctorized解决方案:时间安排:
不幸的是,这个示例的循环解决方案非常慢,因此仅在
60 rows
数据帧中测试:相关问题 更多 >
编程相关推荐