【发布时间】:2022-08-17 22:27:12
【问题描述】:
我使用了 2 种方法在 pandas 中创建了一个全局 df,每一行都是由另一个 df 的过滤产生的。我通过在循环生成的计算列中查找最小值进行过滤,但我读到最好避免在循环内存中使用pd.concat。
与另一种方法相比,在时间上似乎没有太大的差异。
有没有更好的方法?
import time
import pandas as pd
technologies = {
\'X\' :[20000,25000,22000,30000,50000,10000,30000],
\'Y\':[1000,2300,1200,2000,1000,3000,5000]
}
df = pd.DataFrame(technologies)
start_time = time.time()
df1_result=pd.DataFrame()
for i in range(df.shape[0]):
df1=df.copy()
df1[\'i\']=i
df1[\'Y\']=df1[\'Y\'].shift(-i)
df1[\'Dist\']=df1[\'X\']-df1[\'Y\']
idmin=df1[\'Dist\'].idxmin()
result=pd.DataFrame([df1.iloc[idmin,:]])
df1_result=pd.concat(([df1_result, result]), ignore_index=True)
print(\"--- %s seconds ---\" % (time.time() - start_time))
start_time = time.time()
ListResult2=[]
for i in range(df.shape[0]):
df2=df.copy()
df2[\'i\']=i
df2[\'Y\']=df2[\'Y\'].shift(-i)
df2[\'Dist\']=df2[\'X\']-df2[\'Y\']
idmin=df2[\'Dist\'].idxmin()
ListResult2.append(df2.iloc[idmin,:].values.tolist())
df_result2 = pd.DataFrame (ListResult2)
标签: python pandas memory arraylist concatenation