2

同じ列名をすべて含むデータフレームがいくつかあります。それらをマスターデータフレームに追加したいと思います。また、元のフィールドを示す列を作成してから、元のデータフレーム名で塗りつぶしたいと思います。動作するコードがいくつかあります。

df_combine = df_breakfast.copy()
df_combine['X_ORIG_DF'] = 'Breakfast'
df_combine = df_combine.append(df_lunch, ignore_index=True)
df_combine['X_ORIG_DF'] = df_combine['X_ORIG_DF'].fillna('Lunch')
# Rinse and repeat

しかし、それはエレガントではないようです。私は誰かが私にもっとエレガントな解決策を教えてくれることを望んでいました。よろしくお願いします!

注:コメントを反映するように編集されています!

4

2 に答える 2

3

I would definitely consider restructuring you data in a way the names can be accessed neatly rather than as variable names (if they must be separate to begin with).
For example a dictionary:

d = {'breakfast': df_breakfast, 'lunch': df_lunch}

Create a function to give each DataFrame a new column:

def add_col(df, col_name, col_entry):
    df = df.copy() # so as not to change df_lunch etc.
    df[col_name] = col_entry
    return df

and combine the list of DataFrame each with the appended column ('X_ORIG_DF'):

In [3]: df_combine = pd.DataFrame().append(list(add_col(v, 'X_ORIG_DF', k)
                                           for k, v in d.items()))
Out[3]: 
   0  1  X_ORIG_DF
0  1  2      lunch
1  3  4      lunch
0  1  2  breakfast
1  3  4  breakfast

In this example: df_lunch = df_breakfast = pd.DataFrame([[1, 2], [3, 4]]).

于 2013-02-04T21:38:44.233 に答える
2

マスターデータフレームで分析する目的で複数のファイルを結合しようとしたときに、同様の問題が発生しました。これは、各データフレームを個別にロードし、「ID」と呼ばれる列に各データフレームに識別子を付けて結合することにより、そのマスターデータフレームを作成する1つの方法です。データがというディレクトリ内のファイルのリストである場合datadir、次のようにします。

import os
import pandas as pd

data_list = os.listdir(datadir)
df_dict = {}

for data_file in data_list:
    df = read_table(data_file)
    #add an ID column based on the file name.
    #you could use some other naming scheme of course 
    df['ID'] = data_file
    df_dict[data_file] = df

#the concat function is great for combining lots of dfs. 
#it takes a list of dfs as an argument.
combined_df_with_named_column = pd.concat(df_dict.values())
于 2013-02-07T23:59:10.553 に答える