Создайте новые df coulmns для цикла for - PullRequest
1 голос
/ 02 апреля 2020

У меня есть df со столбцом 'x', из которого я хочу получить данные и сохранить их в новом фрейме данных df_pull. Этот процесс я хочу повторить в течение l oop например, 10 раз. Моя проблема заключается в том, что: 'имя' df_pull 'не определено'. Конечно, это потому, что я не защищал df_pull, но как мне создать пустой df. Это не возможно, верно? Я был успешен, создав много списков, но я уверен, что это не лучшее решение.

for i in np.arange(10):
    df_pull[[i]] = df['x'].sample(frac=1)

Спасибо.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Используйте понимание списка с concat, а также важно DataFrame.reset_index с drop=True для избежания тех же значений столбцов (потому что индекс выровнять enet):

r = np.arange(10)
L = [df['x'].sample(frac=1).reset_index(drop=True) for i in r]
df_pull  = pd.concat(L, axis=1, keys=r)

Ваше решение с пустым DataFrame, а также DataFrame.reset_index:

df = pd.DataFrame({
         'y':[7,8,9,4,2,3],
         'x':[1,3,5,7,1,0],

})

df_pull = pd.DataFrame()
for i in np.arange(10):
    df_pull[i] = df['x'].sample(frac=1).reset_index(drop=True)

print (df_pull)
   0  1  2  3  4  5  6  7  8  9
0  1  7  1  1  1  5  3  5  3  1
1  7  1  5  5  0  1  1  1  7  7
2  5  0  0  7  1  3  5  3  1  5
3  3  3  3  0  3  0  7  1  1  3
4  0  1  7  1  5  7  1  7  5  1
5  1  5  1  3  7  1  0  0  0  0
1 голос
/ 02 апреля 2020

Вы можете создать пустой DateFrame просто

pull_df = pd.DataFrame()

, если вы хотите использовать те же столбцы, что и первый df

pull_df = pd.DataFrame(columns=df.columns)
...