我有一个大熊猫数据框,24'000'000行×6列加索引。 我需要读取第1列中的整数(即=1或2),然后如果第1列=1,则强制第3列中的值为负值,如果第2列=2,则强制为正值。我在Jupyter笔记本中使用以下代码:
for i in range(1000):
if df.iloc[i,1] == 1:
df.iloc[i,3] = abs(df.iloc[i,3])*(-1)
if df.iloc[i,1] == 2:
df.iloc[i,3] = abs(df.iloc[i,3])
上面的代码只需要2分钟30秒就可以运行1000行。对于2400万行,需要41天才能完成
有点不对。该代码在相当高端的PC上的Jupyter笔记本电脑/Chrome/Windows中运行
熊猫数据帧是使用pd.read_csv创建的,然后按以下方式进行排序和索引:
df.sort_values(by = "My_time_stamp", ascending=True,inplace = True)
df = df.reset_index(drop=True)
数据帧的创建和排序只需要几秒钟。我还有其他的计算要在这个数据帧上执行,所以我显然需要理解我做错了什么
np.where
将其矢量化:
说明:
将布尔级数
df.iloc[:, 1] != 1
视为int,将其转换为1和0。乘以2,得到2和0。减去1后,得到-1,其中第一列为1,否则为1。最后,它与第三列的绝对值相乘,第三列强制符号与for循环相比,矢量化通常提供一个数量级或两个加速
使用
相关问题 更多 >
编程相关推荐