簡體   English   中英

連接用循環生成的 Pandas DataFrames

[英]Concatenate pandas DataFrames generated with a loop

我正在創建一個名為data_day的新DataFrame ,其中包含新功能,用於從前一個 DataFrame df的日期時間戳推斷出來的每一天。

我的新數據幀data_day是 30 個獨立的數據幀,我需要在 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 循環中生成的數據幀的追加/串聯問題

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)

耗盡生成器比附加到列表更優雅(如果不是更有效)。 例如:

def yielder(df, list_day):
    for i, day in enumerate(list_day):
        yield df[df['day'] == day]

final_data_day = pd.concat(list(yielder(df, list_day))

附加或連接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'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM