我正在创建一个名为 data_day 的新DataFrame,其中包含新功能,每天从前一个DataFrame df 的日期时间戳推断出来。
我的新数据框 data_day 是30个独立的DataFrame,我需要在unic数据帧(final_data_day)中最后连接/追加。
每天的for循环定义如下:
num_days=len(list_day)
#list_day= random.sample(list_day,num_days_to_simulate)
data_frame = pd.DataFrame()
for i, day in enumerate(list_day):
print('*** ',day,' ***')
data_day=df[df.day==day]
.....................
final_data_day = pd.concat()
希望我很清楚。我的基本上是在非平凡的for循环中生成的数据帧的追加/连接问题
答案 0 :(得分:3)
Pandas concat获取数据帧列表。如果您可以使用循环函数生成数据框列表,一旦完成,您可以将列表连接在一起:
data_day_list = []
for i, day in enumerate(list_day):
data_day = df[df.day==day]
data_day_list.append(data_day)
final_data_day = pd.concat(data_day_list)
答案 1 :(得分:1)
追加或连接pd.DataFrame
的速度很慢。您可以在过渡期间使用列表,然后使用pd.DataFrame.from_records()
在最后创建最终pd.DataFrame
,例如:
interim_list = []
for i,(k,g) in enumerate(df.groupby(['[*name of your date column here*'])):
if i % 1000 == 0 and i != 0:
print('iteration: {}'.format(i)) # just tells you where you are in iteration
# add your "new features" here...
for v in g.values:
interim_list.append(v)
# here you want to specify the resulting df's column list...
df_final = pd.DataFrame.from_records(interim_list,columns=['a','list','of','columns'])
答案 2 :(得分:1)
耗尽生成器比附加到列表更有效。例如:
def yielder(df, list_day):
for i, day in enumerate(list_day):
data_day = df[df['day'] == day]
yield data_day
final_data_day = pd.concat(list(yielder(df, list_day))