在 for 循环中创建新的 df 列

Create new df coulmns in for loop

我有一个包含 'x' 列的 df,我想从中采样数据并将其存储在新数据帧 df_pull 中。我想在 for 循环中重复这个过程,例如10倍。我的问题是:“名称 'df_pull' 未定义”。当然,这是因为我没有 defiend df_pull,但是我如何创建一个空的 df。这不可能吧?通过创建很多 if 列表,我很成功,但我确信这不是最好的解决方案。

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

谢谢。

concat一起使用列表comrehension并且DataFrame.reset_indexdrop=True也很重要,以避免相同的列值(因为索引alignmenet):

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

您可以创建一个空的DataFrame 只是

pull_df = pd.DataFrame()

如果您想要与第一个 df 相同的列

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