У меня есть функция, которая принимает dataframe
и возвращает (уменьшенное) dataframe
, например, вот так:
def transforming_data(dataframe, col_1, col_2, normalized = True):
''' takes in dataframe, groups col_1 according to col_2 and returns dataframe
'''
df = dataframe[col_1].groupby(dataframe[col_2]).value_counts(normalize = normalized).unstack(fill_value = 0)
return dataframe
Для следующего кода это дает мне:
import pandas as pd
import numpy as np
np.random.seed(12)
def transforming_data(df, col_1, col_2, normalized = True):
''' takes in df, groups col_1 according to col_2 and returns df '''
df = dataframe[col_1].groupby(dataframe[col_2]).value_counts(normalize = normalized).unstack(fill_value = 0)
return df
numrows = 1000
dataframe = pd.DataFrame({'Numerical': np.random.randn(numrows),
'Category': np.random.choice(['Panda', 'Elephant', 'Anaconda'], numrows),
'Response 1': np.random.choice(['Yes', 'Maybe', 'No', 'Don\'t know'], numrows),
'Response 2': np.random.choice(['Very Much', 'Much', 'A bit', 'Not at all'], numrows)})
test = transforming_data(dataframe, 'Response 1', 'Category')
print(test)
# Output
# Response 1 Don't know Maybe No Yes
# Category
# Anaconda 0.275229 0.232416 0.217125 0.275229
# Elephant 0.220588 0.270588 0.255882 0.252941
# Panda 0.258258 0.222222 0.273273 0.246246
Пока все хорошо.
Теперь я хочу использовать функцию transforming_data
внутри цикла for
для каждого столбца в dataframe
(как у меня естьмного столбцов, а не только два), и сохраните результирующий кадр данных в новом кадре данных, например, test_response_1
и test_response_2
для этого примера.
Может кто-то указать мне правильное направление - то есть, как реализоватьцикл правильно?
Пока что я использую что-то вроде этого - но не могу понять, как сохранить фрейм данных
for column in dataframe.columns.tolist():
temp_df = transforming_data(dataframe, column, 'Category')
# here, I need to save tmp_df outside of the loop but don't know how to
Большое спасибо за указатели иПомогите.(Примечание: самый похожий вопрос, который я нашел , не говорит о фактическом сохранении фрейма данных, поэтому он не помогает мне в этом.