我想在一个pandas dataframe中创建X个新的列,基于dataframe的一个现有列。我想创建新的列,每次将原始列中的值移动1。
我为此编写了以下代码:
import pandas as pd
x = range(1,10000)
df = pd.DataFrame({'QObs':x})
for i in range(1,120):
nameQ = 'QObs' + str(i)
df[nameQ] = df['QObs'].shift(i)
然而,我得到了以下消息:
PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
df[nameQ] = df['QObs'].shift(i)
我试过使用pd.concat和pd.join,但我遇到了类似的问题:
df_new = pd.DataFrame()
for i in range(1,120):
nameQ = 'QObs' + str(i)
df_new[nameQ] = df['QObs'].shift(i)
df = pd.concat([df,df_new], axis=1)
这个版本需要更长的时间来运行。
非常感谢您的帮助!
1条答案
按热度按时间lokaqttq1#
先建立你的清单,然后在最后进行一次连接:
输出: