를 사용하여 가장 빠른 해결책은 :
pd.concat([df3,pd.DataFrame(columns=myList, index=df.index, data=0)], axis=1)
타이밍 :
[20000 개 행이 X 300 개, 기둥, 트러스, 빔
for col in myList:
df[col] = 0
print(df)
a b c d
0 computer 0 0 0
1 printer 0 0 0
또 다른 해결책은 DataFrame
생성자 concat
을 사용하는 것입니다 MNS] : 타이밍에 대한
In [286]: %timeit pd.concat([df,pd.DataFrame(columns=myList)], axis=1).fillna(0)
1 loop, best of 3: 1.17 s per loop
In [287]: %timeit pd.concat([df3,pd.DataFrame(columns=myList, index=df.index,data=0)],axis=1)
10 loops, best of 3: 81.7 ms per loop
In [288]: %timeit (orig(df4))
10 loops, best of 3: 59.2 ms per loop
코드 :
myList=["b","c","d"] * 100
df = pd.DataFrame({"a":["computer", "printer"]})
print(df)
df = pd.concat([df]*10000).reset_index(drop=True)
df3 = df.copy()
df4 = df.copy()
df1= pd.concat([df,pd.DataFrame(columns=myList)], axis=1).fillna(0)
df2 = pd.concat([df3,pd.DataFrame(columns=myList, index=df.index, data=0)], axis=1)
print(df1)
print(df2)
def orig(df):
for col in range(300):
df[col] = 0
return df
print (orig(df4))
흠, 나는 'concat' 솔루션이 빠르다고 생각하지만, 그렇지 않습니다. 매우 흥미로운. – jezrael
@jezrael 그것은 놀랍습니다. 나는 점차적으로 df를 비영리 적으로 성장시킬 것으로 기대합니다. – EdChum