Я пытаюсь взять фрейм данных, перебирать каждый столбец, начиная со второго, и копировать первый столбец констант + следующий по одному на новый фреймворк.
df = pd.DataFrame({'Year':[2001 ,2002, 2003, 2004, 2005], 'a': [1,2, 3, 4, 5], 'b': [10,20, 30, 40, 50], 'c': [0.1, 0.2, 0.3, 0.4,0.5]})
df
Чтобы получить результат, похожий на то, что это выводит, но мне нужно, чтобы он работал в цикле, так как у меня может быть до 40 столбцов для запуска логики.
df_a=pd.DataFrame()
df_a=df[['Year', 'a']].copy()
df_b=df[['Year', 'b']].copy()
df_c=df[['Year', 'c']].copy()
print(df_a)
print(df_b)
print(df_c)
Было бы неплохо, если бы я знал, как назвать df _ ['имя столбца, который он копирует']. Большое вам спасибо и извините, если это дубликат.
Я предлагаю расщепить его через понимание dict, тогда у вас будет словарь ваших отдельных фреймов данных. Например:
dict_of_frames = {f'df_{col}':df[['Year', col]] for col in df.columns[1:]}
Дает вам словарь df_a
, df_b
и df_c
, доступ к которому вы можете получить, как и любой другой словарь:
>>> dict_of_frames['df_a']
Year a
0 2001 1
1 2002 2
2 2003 3
3 2004 4
4 2005 5
>>> dict_of_frames['df_b']
Year b
0 2001 10
1 2002 20
2 2003 30
3 2004 40
4 2005 50
Вам нужно сделать словарь данных, как показано ниже, с именем столбца в качестве ключа и subdataframe в качестве значения.
df = df.set_index('Year')
dict_ = {col: df[[col]].reset_index() for col in df.columns}
Вы можете просто использовать имя столбца для доступа к словарю и получения соответствующего фрейма данных.
dict_['a']
Выход:
Year a
0 2001 1
1 2002 2
2 2003 3
3 2004 4
4 2005 5
Вы можете перебирать dict_
:
for col, df in dict_.items():
print("-"*40) #just for separation
print(df) #or print(dict_[col])
Выход:
----------------------------------------
Year a
0 2001 1
1 2002 2
2 2003 3
3 2004 4
4 2005 5
----------------------------------------
Year b
0 2001 10
1 2002 20
2 2003 30
3 2004 40
4 2005 50
----------------------------------------
Year c
0 2001 0.1
1 2002 0.2
2 2003 0.3
3 2004 0.4
4 2005 0.5
Вам не нужно создавать словарь для копирования и доступа к требуемым данным. Вы можете просто скопировать свой фреймворк (глубокая копия, если у вас есть изменяемые элементы), а затем использовать индексирование для доступа к определенной серии:
dfs = df.set_index('Year').copy()
print(dfs['a'])
Year
2001 1
2002 2
2003 3
2004 4
2005 5
Name: a, dtype: int64
Вы можете перебирать столбцы через pd.DataFrame.iteritems
:
for key, series in dfs.iteritems():
print(key, series)
Да, это дает ряд, но их можно легко преобразовать в series.reset_index()
через series.reset_index()
или series.to_frame()
.
for df in dict_of_frames.keys(): dict_of_frames[df] ...