用循环生成的连接pandas DataFrames

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用循环生成的连接pandas DataFrames相关的知识,希望对你有一定的参考价值。

我正在创建一个名为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循环中生成的数据帧的追加/连接问题

答案

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)
另一答案

附加或连接pd.DataFrames很慢。您可以在过渡期间使用列表,然后使用pd.DataFrame创建最终的pd.DataFrame.from_records(),例如:

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'])
另一答案

耗尽发电机比附加到列表更有效。例如:

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))

以上是关于用循环生成的连接pandas DataFrames的主要内容,如果未能解决你的问题,请参考以下文章

从两个 Pandas DataFrames 向数据帧添加一列,当前使用两个带有条件的循环:有更快的方法吗?

pandas 有效地将 DataFrames 与不匹配的分类列和 MultiIndex 级别连接起来

python 连接Pandas DataFrames(来自http://pandas.pydata.org/pandas-docs/stable/merging.html)

Pandas:在具有不同名称的字段上加入 DataFrames?

提高 Pandas DataFrames 的行追加性能

pandas,读取或存储DataFrames的数据到mysql中